basyura's blog

あしたになったらほんきだす。

:q → :bd に変える

バッファに何個かファイルを開いてる状態で、q or wq してしまって凹む事が結構ある。mru.vim を入れたのでまだましだけど、まだ編集したかったのに・・・開き直しだよ・・・って結構凹む。
じゃあ、終了させなきゃいいんじゃね?と思い立つ。

cnoreabbrev <expr> q   'bd'
cnoreabbrev <expr> q!  'bd!'
cnoreabbrev <expr> wq  'WQ'
command! -nargs=? -complete=dir -bang WQ  call s:WriteClose('<bang>')
function! s:WriteClose(bang)
    if a:bang == ''
        write
        bd
    else
        write!
        bd!
   endif
endfunction

これで合ってるのかは謎。一応意図通りの動きはしてるけど、いろいろやってるうちに不具合がある可能性は大。

突っ込まれたので altercmd を使ってみる

call altercmd#load() "これを書かないとコマンド定義されない
command! -nargs=? -bang WQ  call s:WriteClose('<bang>')
function! s:WriteClose(bang)
  if a:bang == ''
    write | bd
  else
    write! | bd!
  endif
endfunction
AlterCommand q bd
"AlterCommand q! bd! 不要だった
AlterCommand wq WQ

AlterCommand に write と bdelete を同時に渡せない(?)様なのでとりあえずコマンド定義