プロジェクトルートをカレントディレクトリにする vim-findroot
はじめに
この記事は Vim Advent Calendar 2020 その2 のエントリ記事です。(空きがあったので入りました)
この記事で紹介するプラグイン vim-findroot は実は随分前から作っていたのですが、ブログという形で紹介した事が無かったので記事にしたいと思います。
vim-findroot とは
プロジェクトを扱う IDE と比べ、Vim は単位とのファイルを編集する事を目的とするテキストエディタです。Vim を IDE の様に使いたい人は、シェルでプロジェクトルートにカレントディレクトリを移し、そこから相対パス等でファイルを開いておられるかもしれません。
$ cd /path/to/your/project
$ vim src/foo.c
特に最近は Vim から Language Server を使う事も多いのですが、Language Server の一部にはプロジェクトルートに居るかどうかで挙動が変わってしまう物もあります。Vim には元々、ファイルのあるディレクトリに移動する autochdir というオプションがありますが、それだとプロジェクトルートになりません。
そこで誕生したのが vim-findroot です。
vim-findroot を使うと、一般的なプロジェクトルートマーカーが存在するディレクトリに自動でカレントディレクトリを移動してくれます。カレントディレクトリが常にプロジェクトルートなので、ファイルを開く際は今のカレントディレクトリがどこかを気にする必要が無く、相対パスで記憶にあるパスを開いていく事ができます。
カスタマイズ
プロジェクトルートは扱うプログラミング言語によりさまざまです。筆者が思いついた物をデフォルト値としています。
let g:findroot_patterns = [
\ '.git/',
\ '.svn/',
\ '.hg/',
\ '.bzr/',
\ '.gitignore',
\ 'Rakefile',
\ 'pom.xml',
\ 'project.clj',
\ '*.csproj',
\ '*.sln',
\]
ディレクトリの場合は最後に /
を、またワイルドカードとして *
を使う事ができます。これらのファイルまたはディレクトリが、開いたファイルの上方に存在すればそこをプロジェクトルートとして扱う仕組みです。もし希望のマーカーがデフォルト値に無ければ好きな様に追加頂く事ができます。
プロジェクト内での移動
人によってはプロジェクトルート内から更にディレクトリを下った場所のファイルを開く際は自動でカレントディレクトリを変えられたくないと思うかもしれません。
$ cd /path/to/your/project
$ cd src
こういった場合には以下の様に設定して下さい。
let g:findroot_not_for_subdir = 0
注意点
例えば以下の様にプロジェクトのサブディレクトリに移動して CtrlP の様な機能を使う場合、カレントディレクトリ配下ではなくプロジェクトルート配下のファイル一覧が表示されることになります。
$ cd /path/to/your/project/src
この挙動が好きになれない方は、vim-findroot の使用をオススメできません。
まとめ
簡単ながら vim-findroot を紹介しました。挙動が少し変わるので、使い始め混乱する可能性がありますが慣れると IDE の様にさくさくファイルを開く事ができます。
Discussion