目次
背景
こんにちは。 かりんとうマニア(@karintozuki)です。
NeoVimを使っていて、プロジェクトごとの設定をしたいときがあったので、私なりの解決方法を共有します。
(完全に自己流ですので、それを承知した上で読み進めてください。)
ユースケース
プロジェクトごとにNeoVimの設定ができると嬉しいことが多いです。
例えば、私はPHPメインで仕事をしているのですが、趣味でPythonを書いたりしていて、どちらのプロジェクトでもコードフォーマットをExコマンドの「:Format」に割り当てています。
ただ、PHPとPythonで内部で呼び出すものが違いますよね。
(PHPならphp-cs-fixer、Pythonならblackを走らせたい)
Exコマンド以外にも、init.vimに書きたいけど、いつも使うわけではなく特定のプロジェクトにだけ適用したいみたいな設定は割とあると思います。
なので、VS codeのworkspace.jsonに倣って、workspace.vimなるものを作ってみました。
Autocommandを設定する
workspace.vimは特にプラグインとかではなく、Vimスクリプトで実現しています。
まずはinit.vimに以下のvimスクリプトを足します。
1 | autocmd FileType nerdtree exec "call LoadWorkspaceIfExists()" |
こうすると、フォルダをNeoVimで開いた際にそのフォルダ内にworkspace.vimファイルがあれば自動で実行してくれます。
私はNERDTreeを使っているのでこんな感じですが、他のプラグインを使っている人も似たようなコードになると思います。
workspace.vimを試す
それでは実際にworkspace.vimを試してみましょう。
適当な場所にフォルダを作って、そのフォルダ内にworkspace.vimを作成します。
workspace.vim内にはvimスクリプトなら何でもかけます。
私はよくNeoVimで開いているファイルに対して、CLIツールを実行するExコマンドを定義します。
試しに開いているファイルにwc
を使って、ファイル中に含まれる単語数を表示するExコマンド、「:WordCount」を定義してみます。
1 | function! s:showWordCount() |
そしたらNeoVimでこのフォルダを開いてみてください。
このworkspace.vimが実行され「:WordCount」が定義されているはずです。
何かファイルを開いて「:WordCount」を実行すると単語数が表示されるはずです。
私のPHPプロジェクトでは開いているファイルのフォーマッターを走らせたり、テストを実行するなどのコマンドを定義しています。
もちろんこれ以外でも特定のプラグインをOn/Offしたり、プロジェクト固有のショートカットや変数を宣言したり、できることは無限です。
プロジェクトごとに定義できるので、言語が違うプロジェクトでも共通のコマンドを使うことができるのが良い感じです。
まとめ
この記事ではプロジェクト固有の設定ができるworkspace.vimの使い方を説明しました。
NeoVimは色々なプラグインがありますが、フォルダ単位で設定を保存するにはこの方法がシンプルでしっくりきました。
それじゃ今日はこの辺で。
関連記事
こちらの記事もおすすめです。