Vimのターミナルをすこし使いやすくする
初めに
こんにちは ゴリラです
Vimでターミナルを使うときは:term ++close +shell {cmd}
というふうに実行することが多々ありますが、
オプションが多くなると、いささか不便に感じます。
そこで、BufReadCmd
を使えば、ターミナルがちょっと使いやすくなります。
やり方
function! s:termopen() abort
let name = split(bufname(), '\/\/')
if len(name) < 2
return
endif
call execute(printf('term ++curwin ++close ++shell %s', name[1]))
endfunction
augroup terminal
au!
au BufReadCmd term://* call s:termopen()
augroup END
上記のコードをvimrc
に追記&リロードして、:vnew term://top
すると、ターミナルが起動してtop
コマンドが動きます。
しくみ
しくみは簡単で、bufferが作られたら BufReadcmd
イベントが走るので、そのとき s:termopen
を実行させるように autocmd
を設定します。
s:termopen
関数内ではバッファ名からterminalで実行するコマンド(//
よりも後ろの部分)を取得してターミナルを起動します。
//
よりも後ろがコマンドになるので、たとえばtabnew term://bash
でも動くし、new term://docker exec -it golang bash
でも動きます。
設定自体はシンプルでかつ柔軟にコマンドを実行できるので個人的に便利と思っています。
さいごに
このターミナルのカスタマイズはneovimから着想を得ました。neovimでは標準で同じようなことができます(ヘルプより抜粋)。
- Edit a file with a name matching `term://(.{-}//(\d+:)?)?\zs.*`.
For example:
:edit term://bash
:vsplit term://top