tig-explorer.vimの使い方

Vim用のGitクライアントが欲しかった

vimのgitプラグインとして何を使っているのが多いだろうか?
自分の観測範囲ではfugitiveを使っている人が多いようだ。

しかし、ターミナルではCUIツールで高速なプレビューの出来るtigをGitクライアントとして利用している人は多いのではないだろうか。

vimでもtigが使いたい。そんな人(自分)のためにvim pluginを作成した。

tig-explorer.vim

tig-explorer.vimtigをvimから扱うプラグイン。

tigの機能でdiff上からeキーを押下すると任意のエディタで該当箇所を開く事が出来るが、このプラグインを使うと、vimからtigを呼び出すことが出来る。

Image from Gyazo

tigを開き、差分をチェックして、そこから再びvimで開くことが出来る。

また、vimからtigを呼び出すには!tigコマンドをvimのコマンドモードから呼び出すことでも同じことが実現でも可能だが、 プロセスがvim-tig-vim-tig-vimのようにどんどんネストしてしまう。

このプラグインを経由してエディタで開く場合は親のvimプロセスで開くため、vim上のbuffer移動やhistory、yankが途切れることがない。

また、vimからtigに行番号やファイル名を渡せるので、↓のコマンドが格段に扱いやすくなる。

  • tig FILEPATHで閲覧中のファイルの履歴を見る(:TigOpenCurrentFile)

  • tig grep PATTERN PATHでプレビューしてから開く(:TigGrep)

  • tig blame FILEPATHで現在のファイル履歴を行単位で見る(:TigBlame)

tig-explorer.vimのカスタマイズ

.vimrcの記述例

" tigを開く
nnoremap <Leader>t :TigOpenProjectRootDir<CR>

" 現在のファイルの履歴を見る
nnoremap <Leader>T :TigOpenCurrentFile<CR>

" パターンでtig grepする
nnoremap <Leader>g :TigGrep<CR>

" tig grepした内容を再呼び出しする
nnoremap <Leader>r :TigGrepResume<CR>

" 選択中のキーワードでtig grepする
vnoremap <Leader>g y:TigGrep<Space><C-R>"<CR>

" カーソル下のキーワードでtig grepする
nnoremap <Leader>cg :<C-u>:TigGrep<Space><C-R><C-W><CR>

" 現在のカーソル位置でtig blameする
nnoremap <Leader>b :TigBlame<CR>

また、このプラグインの特徴的なところでtig上でCtrl-tを押下するとvimのタブで開く機能が追加されている。 同様にCtrl-sで水平分割, Ctrl-vで垂直分割出来る。

Image from Gyazo

tig上のvimを開くキーバインドの動的に追加していて、下記がデフォルトの設定値。

let g:tig_explorer_keymap_edit    = '<C-o>'
let g:tig_explorer_keymap_tabedit = '<C-t>'
let g:tig_explorer_keymap_split   = '<C-s>'
let g:tig_explorer_keymap_vsplit  = '<C-v>'

.vimrc上でtig-explorer.vimから開いた際にのみ利用可能なキーバインドが定義できる

得意な専任のCUIツールに任せる

なんでもvimにやらせようとするのではなく、専任のツールにまかせてしまえばCUIでもVimでも操作感は変わらず、vimに任せるよりも体験が良い場合が多々ある。

同じコンセプトでranger-explorer.vimというrangerをデフォルトファイラとして扱うvimプラグインもあるのでぜひ試してみて欲しい。