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

:terminal on vim8で生きてる人のための:bw設定

$
0
0

対象読者

  • Terminal.app だの iTerm2 なんて捨てた
  • vim 起動して :terminalで生きてる

背景

vim 8 の:terminalで生きてる。
iTerm.appのaliasにgvimとか設定するレベル。

最初の頃は、:terminalの中で exitとすると、
terminal bufferだけがcloseされて、他のバッファに切り替わったんだけど、
ちょっと前から普通のバッファを:qしたときと同じ挙動に変わった。
要は「terminalが最後のwindowだと、vimごと終了する」。
(参考: :h terminal-close

基本vimにいて、たまにterminalを使うみたいな使い方だとこれが非常にだるい。

方針

ExitPreとかでフックして終了処理止めちまえと思ったんだけど、
そんな方法が見つからなかったのと、ExitPreは終了直前の処理なので、echomとかしてもログ見れなくてだるい。

ので、

  • terminal は基本++nocloseで使う
  • terminal の中のシェルの方で特殊な終了処理をする

という方向で攻めた。

結論

vimrc.vim
nnoremap <silent> tt :<C-u>terminal++curwin ++noclose <CR>
nnoremap <silent> tx :<C-u>terminal++noclose         <CR>
nnoremap <silent> tv :<C-u>vertical terminal++noclose<CR>" ++nocloseで開くので、exitしたらそのままbuffer wipeoutしたい。" zshrcの方で function :bw() としてこいつを呼び出してexitするコマンド :bw を定義済function! Tapi_WipeoutTerminalBuffer(bufnum, arglist)
  autocmd! SafeState <buffer>++once bwipeoutendfunction
zshrc.zsh
# :bw で exit -> noclose指定のterminalウインドウを閉じるfunction :bw(){echo-ne"\033]51;[\"call\", \"Tapi_WipeoutTerminalBuffer\", []]\07"exit}

terminal-apiが便利。
流石に exitをoverrideするの、トラブったときにやな感じだなと思ったので、
exitっぽいコマンドをzsh側で定義してる。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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