Vimのtab機能とfuzzyfinder.vimのマッピング設定をしたら編集ファイルの切り替えが超快適になった

Vimのtab機能を利用すると,以下のように画面上部に現在開いているバッファの一覧が表示されるようになる.GNU screenのhardstatusっぽい感じ.

また,fuzzyfinder.vimはバッファやファイルをあいまい検索や部分一致検索で開くことができるプラグイン.候補一覧が最近使ったファイルを基にソートされたりして便利.

例えばFuzzyfinderのファイルモードで「rc」に部分一致するファイルを列挙するとこんな感じになる.

fuzzyfinder.vim

http://www.vim.org/scripts/script.php?script_id=1984


ただ,これらはデフォルトのままだと:tabmoveや:FuzzyFinderFileなど非常に長いExコマンドを使わないと利用できないので,押しやすいキーマップを設定して簡単に操作できるようにしてみた.

設定したマッピング一覧

CtrlやShiftを一切使わずに操作できるようにしてみた.小指にやさしい!

  • タブ操作
    • tc : タブを作る(create)
    • tk : タブを閉じる(kill)
    • tn : 次のタブに移動(next)
    • tp : 前のタブに移動(previous)
  • 現在のタブでFuzzyfinderを使ってファイル/バッファを開く
    • fb : 現在のタブでバッファを切り替える
    • ff : 現在のタブでファイルを開く
    • fm : 現在のタブで最近使ったファイルを開く
  • 新しいタブでFuzzyfinderを使ってファイル/バッファを開く
    • tb : 現在のタブでバッファを切り替える
    • tf : 現在のタブでファイルを開く
    • tm : 現在のタブで最近使ったファイルを開く

.vimrc

.vimrcの設定は以下の通り.

set showtabline=2

" Tabs
nnoremap <Space>t t
nnoremap <Space>T T
nnoremap t <Nop>
nnoremap <silent> tc :<C-u>tabnew<CR>:tabmove<CR>
nnoremap <silent> tk :<C-u>tabclose<CR>
nnoremap <silent> tn :<C-u>tabnext<CR>
nnoremap <silent> tp :<C-u>tabprevious<CR>

" FuzzyFinder.vim
nnoremap <Space>f f
nnoremap <Space>F F
nnoremap f <Nop>
nnoremap <silent> fb :<C-u>FuzzyFinderBuffer!<CR>
nnoremap <silent> ff :<C-u>FuzzyFinderFile! <C-r>=expand('%:~:.')[:-1-len(expand('%:~:.:t'))]<CR><CR>
nnoremap <silent> fm :<C-u>FuzzyFinderMruFile!<CR>
nnoremap <silent> tb :<C-u>tabnew<CR>:tabmove<CR>:FuzzyFinderBuffer!<CR>
nnoremap <silent> tf :<C-u>tabnew<CR>:tabmove<CR>:FuzzyFinderFile! <C-r>=expand('#:~:.')[:-1-len(expand('#:~:.:t'))]<CR><CR>
nnoremap <silent> tm :<C-u>tabnew<CR>:tabmove<CR>:FuzzyFinderMruFile!<CR>

補足

  • nnoremap {lhs} {rhs}」はnormalモードのkey mappingを定義するコマンド.{lhs}のキーシーケンスを{rhs}にマッピングする.{rhs}中のキーがさらにマッピングされていても再帰的な展開はしない.
  • nnoremapの{rhs}にを指定すると,{lhs}を入力しても何も起こらなくなる(No Operation).
  • nnoremapで「」を指定すると,マッピングされたキーが実行されたときにコマンドラインへの出力を行わなくなる(ちらつき対策).
  • tabnewは現在開いているタブの次の位置に新しいタブを開く.
  • tabmoveは引数なしで呼び出すと現在のタブを最後尾に移動させる.
  • FuzzyFinder****!のように,「!」を付けるとFuzzyfinderで部分一致検索が有効になる.「!」を取り除くとあいまい検索になる.
  • FuzzyFinderFile!でファイルを開くときに,expand()を使って現在編集中のファイルがあるディレクトリを起点にしてファイルを探すようにしている.
  • 元のt(カレント行で文字を後方検索)はtにマッピングしている.
  • 元のf(カレント行で文字を前方検索)はfにマッピングしている.

以上

修飾キーなしのキータイプだけでタブ切り替えやファイル操作ができるのはかなり快適.それと,fuzzyfinder.vimによる部分一致検索や最近開いたファイルを開くモードもなかなか便利で,これが手軽に使えるようになったのは大きい.もう:eなんかでファイルを開いている場合じゃないですねこれは!


しばらくこのマッピング設定でVimを使ってみる予定.また,fuzzyfinder.vimはまだまだカスタマイズできる部分があるので,気が向いたらいろいろいじってみたい.