スポンサーリンク

個人的に気に入っているNeovim設定 ~luaコード、置いてます~

記事内に広告が含まれています。

以前、Atomが開発終了となるのに合わせて、テキストエディタをNeovimに変更しました。ですが、何しろ初めてVim系列のエディタを使ったため、最初は設定スクリプト(Vim scriptとLua)がまったく分からず、ネット上で見つけてきた色々なコードをコピペして、キメラ状態にして済ませておりました。

Vim scriptやluaだけでなく、gitやcmakeに触ったのも初めてだったこともあって、尚のこと、Neovimの設定スクリプトを勉強するのが大変でした(単にすべきタスクが多くなりすぎたのですね。環境は一度に大きく変更しすぎると、慣れるのに時間がかかるという至極当然のことを学びました)。

最初は興味本位で様々な設定やプラグインを試していて、公開するにはあまりに頻繁に変更していましたし、バグや間違った部分も多々あったので、公開しないでいました(まぁ、僕の設定ファイルを使う人はそんなに居ないでしょうから、公開してもよかったのかもしれませんが)。

ですが最近は、ようやくNeovimの設定方法もわずかながら理解できてきて、自分なりにコードを書けるようになってきました。

利用しているプラグインも、もうあまり変更しないだろう(当然、プラグインのメンテナンスが終了したりすれば変更しますが)と思えるようになってきたので、公開しようかなと思った次第です。いまだ継ぎはぎだらけではありますが、多少はマシなキメラだと思います。

コードはコチラのGitHubで公開しています。

誰かの参考になれば幸いです。

※ここに書いてあることは2022/11/10現在のコードについてのものであって、この記事の閲覧時に公開されているコードの内容とは違っているかもしれません。場合によっては、公開しなくなっているかもしれません(なんと頼りにならん紹介だ)。

スポンサーリンク

基本的な使い方

ざっくりとした使い方です。各キーにどんな機能が割り当てられているのかが分かれば、多少は参考にしやすいかと思ったので載せてます。プラス記号でつないでいるものは同時に、プラス記号なしで文字をつないでいるものは左から順に押せば、その機能が実行されるようになっています。

Vimをご利用の方なら、ここでの表記は雰囲気でも理解できるのではないかと思います。

  1. ファイルオープン : ‘,’ + ‘f’
  2. プロジェクトディレクトリに移動(というか、プロジェクトディレクトリに存在するファイルを開く) : <Ctrl>+’p’
  3. 定義ジャンプ : gd
  4. 変数名のリネーム : gn(文字列を置換するという意味では、「:%!sed」に似た感じの機能)
  5. 語頭ジャンプ : <Space> + <Space> + ‘w’
  6. 語尾ジャンプ : <Space> + <Space> + ‘e’
  7. git statusを開く : <Space>G

僕が個人的によく使っている機能はおおよそこんなところです。

例外もありますが、基本的には<Space>二度押しでhop.nvim、<Space>一回押しでvim-fugitive、gでlsp関連、’,’(コンマ)でtelescope.nvimの機能を呼び出せるようにしています。

他にも、プラグインを利用していない設定としては次のようなものがあります。

  1. Packer.nvimとiceberg.vimを自動でダウンロード(バグあり)
  2. ファイルを保存するとき、そのファイルを保存するディレクトリが存在していなかったら、ディレクトリを作るかどうかを確認するメッセージを表示して、yが入力されたらディレクトリを自動で作成する
  3. <Space><Enter>でMSYS2上のbashを起動する

この3に関しては様々な応用方法があります。個人的によく使うのはgit mvの一括実行と簡単なデータ分析の2つです。

ここから次の節までは蛇足です

git mvをエディタ上で実行する

git mvを複数のファイルに対して実行したい場合、本来ならgit mvをそのファイルすべてに対して実行する必要があります。

特に、C++でプログラムを書いていると、ヘッダファイルの名前とソースファイルの名前を両方とも変更したいことがあるのですが、そのように複数のファイルの名前を一括で変更したい場合はとても便利です。

ざっくりとした手順を説明します。

git mvの構文はgit mv <元のファイル名> <変更後のファイル名>となっていますから、最終的にはこのような構文をすべてのファイルに対して作ることが目的です。つまり、最終的にエディタ上に表示させたい文字列は、次のようにgit mvの構文がいくつか並んだものになります。

git mv A A'
git mv B B'
...

このような文字列を作ることができれば、あとは<Space><Enter>を押していくなり、<Shift>vで範囲を選んだあとで、:!bashを実行したりすれば作業完了です。

そのような文字列を作る方法としては、例えば、エディタ上に次のようなコードを書いて<Space>を押した直後に<Enter>を押すと、ファイルのリストが表示されます(ファイルの内容が変更されることになるので、:e launcherなどと適当な名前で新しいバッファを開いた方が無難です)。

c:/msys64/usr/bin/find.exe ./ -name Matrix.* | rg '\./(include|src)'

みたいなコードをエディタ上に直接書いて、<Space><Enter>を押すと、./includeもしくは./srcから始まって、かつMatrix.*という名前になっているファイルのリストをエディタ上に表示してくれます。

※findはWindows標準のコマンドにもあるので、絶対パスで指定しないとWindows標準の方が使われてしまいます。

そこから:%!awk ‘{print $0, $0}’を実行すれば、そのコマンドが実行された段階では、エディタの内容は次のようになっています。AやBをファイル名だと思ってください。

A A
B B
...

その名前が表示された後に、<Ctrl>vで先頭にgit mvという文字列を追加して、後者の名前を変更すれば、目標としていた文字列を得られますので、後は外部コマンドのbashを実行していけば作業完了です。

この前、500近い写真ファイルの名前を連番に変更したいことがあったのですが、そのときはここに書いた手順で処理しました。先頭に追加した文字列はgit mvではなくmvにしたという違いなどはありますが、概ねこのような手順でした。

簡単なデータ分析

データをcsvファイル形式で保存しておけば、awkで平均値を求めることができます。平均値を求めたい場合は、平均値を求めたいデータ(そのデータが連続行で保存されている必要はありますが)を<Shift>vなどで選んで、

awk -F',' '{cnt++; sum+=$2} END{print sum/cnt}'

などと打ち込んで実行すれば、Excelなどの表計算ソフトを利用せずに求められます。このコマンド(というかスクリプト?コード?)を実行した場合、2列目のデータの平均値を求めることができます。

 

…なんか、設定を紹介する記事なのに、Neovimのbashを実行する機能の紹介みたいな感じになってしまいました。

※この機能のせいで、たまに「NeovimってOSだな」と感じることがあります。何かの本のどこか(たしか著者紹介だったような気がする)で、暗黒美無王ことShougoさんが「VimはOSだと発言してるけど、周りに理解されない」みたいなことを書いてた気がしますが、その影響を受けてますね。NeovimはOSなのだ。

スポンサーリンク

注意点(というか、未来の自分のための備忘録)

基本的にはNeovimの外部で別途必要なことなどを書いています。もしも僕のスクリプトをそのまま利用するのであれば、以下の点にご注意ください。

0. Windows環境下でのNeovimを想定しています

LinuxやMac環境でも正しく動作するかは分かりません。というか、Windows環境以外では十中八九、正しく動作しないと思います。

さらにNeovimでしか動かないプラグインも入れているので、Windows環境下であっても、Vimでは動かないと思います。

1. 初めて使うときはエラーメッセージが大量に表示されるかもしれません

僕のスクリプトを初めて読み込んだ場合は、Packericeberg.vim(カラースキーム)を自動でダウンロードしてくれるようなコードにしています。ですが、実際に正しく動作するかは確認していません(冒頭の「バグも少なくなってきた」とは一体…)。

なので、もしも上手く動作しなかったら、iceberg.vimのインストールディレクトリを作ったり、Packerを手動でインストールしたり等、ご自身で対処してください。

2. Netrw等、ファイラは使っていません

ファイルは基本的にtelescope.nvimで開くようにしているので、ファイラは使っていません。デフォルトではオンになっているNetrwをオフにしているので、:eコマンドだけを実行してもエラーメッセージが表示されます。

ファイラを使っていると、別のプロジェクトのファイルも割と簡単に開くことができます(という印象があります)。それはとても良いことであって、ファイラを導入する意義の一つでもあると思います。

ですが僕の場合は、参照だけしたいプロジェクトのファイルを間違って編集してしまうというミスにつながったことがあったので、ファイラを使わないようにしました。

そんなことがあったので、一つのNeovimに対して一つのプロジェクトを開くという使い方にしています。そうなるとtelescope.nvimだけで十分だなと。

3. telescopeはripgrepを利用しています

これは僕の設定ファイルと言うよりも、どちらかと言うとtelescope.nvimの注意書きみたいなものですが、一応書いておきます。

telescopeは一部の機能でripgrepというプログラムを利用しています。ですから、あらかじめripgrepをダウンロードして、その実行ファイルのパスを通しておく必要があります。

4. SKK辞書を利用しています

SKKELETONを利用して、SKKを使えるようにしています。設定上ではSKKELETONを利用できるようにしていますが、nvim-dataディレクトリ直下にSKK辞書を置かないと動きません。SKK辞書はこちらからダウンロードできるようになっています。

5. VSnipのコードはご自身で用意していただく必要があります

スニペットプラグインとして、hrsh7th氏のvim-vsnipを利用しています。このプラグインはjsonファイルとして、あらかじめ書いておいたスニペットを展開できるようにしてくれるプラグインです。

つまり、あらかじめスニペットを書いておく必要があります。ですが、そのjsonファイルはご自身で用意していただく必要があります。僕のようにC++をよく利用される方なら、こちらのコードなどが参考になると思います。

まとめ

Neovimの設定ファイルを公開しましたと言いたかっただけです。ただそれだけのための記事です。

もしNeovimの設定で詰まったら、「そういえば設定ファイル(月)が落っこちてたな」と思い出していただけると幸いです。

タイトルとURLをコピーしました