Vim で前のカーソル位置に戻るプラグインをつくった

この記事は Vim Advent Calendar 2012 237日目の記事になります。


さて、Vim で前のカーソル位置に戻る機能といえば jumplist があります。


この機能を使うことでカーソル位置の履歴を遡る事ができます。
jumplist では別のバッファへとカーソルが移動する場合、現在のウィンドウで対象のバッファが開かれます。
しかし、複数のウィンドウやタブを開いている場合、現在のウィンドウでバッファを開くのではなくて、カーソル位置を記憶したタブページ、ウィンドウへとカーソルが移動して欲しいと思う事が多いです。


と、いうことで前のカーソル位置に戻る場合、現在のウィンドウでバッファを開くのではなくて、記憶したカーソル位置のタブページ、ウィンドウへと移動を行うプラグインをつくりました。

[インストール]

NeoBundle "osyo-manga/vim-milfeulle"

[使い方]

" 履歴を移動するマッピング
nmap <C-o> <Plug>(milfeulle-prev)
nmap <C-i> <Plug>(milfeulle-next)

" カーソル位置の保存・移動方法の仕組み
" これはウィンドウ、タブ、バッファ番号、位置、行を保持する
" e.g.
" 保存した時と現在の行の値が違っていれば移動しない
" ウィンドウ、タブで別のバッファが開かれていれば移動しない
let g:milfeulle_default_jumper_name = "win_tab_bufnr_pos_line"


デフォルトでは以下のタイミングでカーソル位置が保存されます。

  • CursorHold
  • InsertLeave


また、以下の様な設定を行うことでウィンドウ単位で履歴を保持することもできます。

" 保持単位をウィンドウに
let g:milfeulle_default_kind = "window"

" バッファ番号と位置を保存する
" 別のバッファへ移動する場合、そのウィンドウでバッファを開く
let g:milfeulle_default_jumper_name = "bufnr_pos"


移動方法についてはユーザ側で自由に制御することも可能です。
詳しい使い方については :help milfeulle.vim を参照してください。
ぶっちゃけ、まだ細かい部分や設定方法なんかは考え中だったりします。
また、他にも実装してほしい機能があれば教えてもらえると助かります。