結城浩のはてなブログ

ふと思いついたことをパタパタと書いてます。

Vimで誤って":wq"のようなファイルを作ってしまうのを防ぐ方法(autocmdを使う)

背景

  • Vimを使っている。

問題

  • Vimの「書き込んで終了」コマンドは ":wq" だが、誤って ":w:wq" のようにしてしまうと ":wq" という変なファイルができてしまう。

解法

  • autocmdを使って特定のファイル名の書き込みには警告を出す。

詳細

  • id:tyruさんのエンター巻き込み事故を防ぐのコードを利用する。
  • 以下では ":" で始まるか、"[" で終わるか、"]" で終わるファイル名のときに警告を表示している。
" Checking typo.
" http://d.hatena.ne.jp/tyru/20130419/avoid_tyop (一部修正)
autocmd BufWriteCmd :*,*[,*] call s:write_check_typo(expand('<afile>'))
function! s:write_check_typo(file)
    let prompt = "possible typo: really want to write to '" . a:file . "'?(y/n):"
    let input = input(prompt)
    if input =~? '^y\(es\)\=$'
        execute 'write'.(v:cmdbang ? '!' : '') a:file
    endif
endfunction

謝辞