プロジェクトごと(特定ディレクトリ以下ごと)に .vimrc を切り替えて使う方法

複数のプロジェクトに参加している場合に、プロジェクトごとに vim の設定(.vimrc など)を自動で切り替える方法を direnvvim 用の環境変数 VIMINIT で実現できたのでメモしておく

前提

  • 通常とは異なる vim 設定を読み込みたいプロジェクトのファイルは '~/workspace/project_aaa/' 以下に存在すると仮定する
  • 通常とは異なる vim 設定の設定ファイル配置場所は '~/workspace/project_aaa/__vimrc' と仮定する

設定手順

  • vim 関連の設定ファイルをコピー
$ mkdir ~/workspace/project_aaa/__vimrc/
$ cp -p ~/.vimrc ~/workspace/project_aaa/__vimrc/
$ cp -rp ~/.vim/ ~/workspace/project_aaa/__vimrc/
  • vim の runtimepath を ~/workspace/project_aaa/__vimrc/.vimrc へ設定(先頭に追加)
" vim default runtimepath
set runtimepath=~/workspace/project_aaa/__vimrc/.vim,/usr/share/vim/vimfiles,/usr/share/vim/vim82,/usr/share/vim/vimfiles/after,~/workspace/project_aaa/__vimrc/.vim/after

既存の runtimepath が分からなければ、vim 内で「:echo &rtp」によって現在の runtimepath を確認可能なので、参考にしつつ必要な箇所を __vimrc のディレクトリへ変更する

  • direnv のインストール

以下手順に従ってインストール

https://direnv.net/docs/installation.html

  • direnv の初期設定

以下手順に従って設定

https://direnv.net/docs/hook.html

  • vim の設定を変更したい特定ディレクトリ直下(今回は ~/workspace/project_aaa/)に以下 .envrc を作成

~/workspace/project_aaa/.envrc に以下内容のファイルを作成

export VIMINIT='source $MYVIMRC'
export MYVIMRC='${HOME}/workspace/project_aaa/__vimrc/.vimrc'
  • 以下コマンドでこのディレクトリにおける direnv を有効化する
$ cd ~/workspace/project_aaa/
$ direnv allow .

以上の設定で、'~/workspace/project_aaa/' 以下に移動した場合に自動で '~/workspace/project_aaa/__vimrc/.vimrc' を .vimrc として読み込むようになる

$ cd ~/workspace/project_aaa/path/to/somedir

上記のように cd すると、下記のように設定が有効になる

direnv: loading ~/workspace/project_aaa/.envrc
direnv: export +MYVIMRC +VIMINIT

これで '~/workspace/project_aaa/__vimrc/.vimrc' を編集すれば、'~/workspace/project_aaa/' 以下でのみ設定が有効になる

この設定の欠点

  • 外部ディレクトリで起動した vim から '~/workspace/project_aaa/' 内のファイルを開いた場合には設定が有効にならない

別の良い方法があれば知りたい

追記

localrc.vim というのを教えてもらった
良さそう

thinca.hatenablog.com