Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5657

Vimのターミナルをすこし使いやすくする

$
0
0

こんにちわ
ゴリラです

Vimでターミナルを使うときは:term ++close +shell {cmd}というふうに実行することが多々ありますが、
オプションが多くなると、いささか不便に感じます。

そこで、BufReadCmdを使えば、ターミナルがちょっと使いやすくなります。

やりかた

function!s:termopen() abort
  let name = split(bufname(),'\/\/')if len(name)<2returnendifcall execute(printf('term ++curwin ++close ++shell %s', name[1]))endfunction

augroup terminal
  au!auBufReadCmd term://* calls:termopen()
augroup END

上記のコードをvimrcに追記&リロードして、:vnew term://topすると、ターミナルが起動してtopコマンドが動きます。

vim-term.gif

仕組み

仕組みは簡単で、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

Viewing all articles
Browse latest Browse all 5657

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>