この記事は Vim Advent Calendar 2016 の 16 日目の記事です。
みなさん、VimのMRUといえば、mru.vimとかctrlpとかunite/neomruでしょうか?あまり知られていませんが、Vim自体にも、最近開いたファイルを記録してくれる機能(MRU)があります。
:oldfiles
まずは、:oldfilesコマンド。実行すると、番号とファイルパスの一覧が出力されます。
:oldfiles実行例:
1: ~/.vimrc
2: ~/.vimplugins/vimdoc-ja/doc/tagsrch.jax
3: /usr/share/vim/vim74/doc/syntax.txt
4: ~/Dropbox/memo/2016-12-14.md
5: ~/Dropbox/config_swx-04.txt
6: ~/.vimplugins/vimdoc-ja/doc/options.jax
続けるにはENTERを押すかコマンドを入力してください
この出力のファイル名の左の数字を使うことで、該当するファイルを開くことができます。
:oldfilesの結果に基づいてファイルを開く例
" 2番のファイルを開く
:e #<2
" ウインドウを分割して3番のファイルを開く
:split #<3
" 新しいタブで5番のファイルを開く
:tabe #<5
:browse oldfiles
数字を指定するのはちょっと面倒ですよね。単に開くだけならもっと簡単な方法があります。:browse oldfilesです。このコマンドも:oldfilesと同じ一覧が表示されますが、最後に番号を入力するプロンプトが表示されるという違いがあります。
:browse oldfiles実行例:
1: ~/.vimrc
2: ~/.vimplugins/vimdoc-ja/doc/tagsrch.jax
3: /usr/share/vim/vim74/doc/syntax.txt
4: ~/Dropbox/memo/2016-12-14.md
5: ~/Dropbox/config_swx-04.txt
6: ~/.vimplugins/vimdoc-ja/doc/options.jax
番号と<Enter>を入力してください (空でキャンセル): _
Vim 8の:filterコマンドと組み合わせる
...前置きが長くなりましたが、ここからが本題のVim 8ネタです。上記の:browse oldfilesですが、Vim 8で追加された:filterコマンドと組み合わせると、Vimの正規表現で事前に一覧を絞り込んでおくことができます。oldfilesの結果が多くなっているときに便利度が上がります。
使い方:
:browse filter /パターン/ oldfiles
:browse filter /\.jax$/ oldfiles実行例:
2: ~/.vimplugins/vimdoc-ja/doc/tagsrch.jax
6: ~/.vimplugins/vimdoc-ja/doc/options.jax
番号と<Enter>を入力してください (空でキャンセル): _
こういうマッピングを定義しておくと便利かな。
nnoremap <Leader>e :<C-u>/ oldfiles<Home>browse filter /
注意::filterによる絞り込みは出力が絞り込まれるだけなので、選択時に入力する数字は絞り込み前のものと同じです(番号が振り直されるわけではないです)。また、絞り込み後に表示されていなくて元の一覧にある別の番号でも開けます。
以上、:browse oldfilesと:filterを組み合わせたお手軽MRUの紹介でした。