1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-01-01

対象読者

  • 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 bwipeout
endfunction
zshrc.zsh
  # :bw で exit -> noclose指定のterminalウインドウを閉じる
  function :bw() {
    echo -ne "\033]51;[\"call\", \"Tapi_WipeoutTerminalBuffer\", []]\07"
    exit
  }

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?