20

誤ってvimを終了するのを防ぐために、vimの:qをより複雑なコマンドに再バインドする方法はありますか?

4

6 に答える 6

15

あなたが欲しいのはです:close。次のように動作:qしますが、最後のウィンドウを閉じることはできません:

http://vimdoc.sourceforge.net/htmldoc/windows.html#:閉じる

qマップするコマンドのエイリアスを設定できますclose

cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'close' : 'q')<CR>

この :cabbrev トリックについて @Paradoxial に感謝します。

于 2013-02-21T09:22:28.313 に答える
5

あなたが恐れているのは何ですか?保存されていない変更がある場合、 Vim は (!とにかくコマンド修飾子なしで) 終了させません。そのため、失われる可能性があるのは、GVIM のウィンドウの位置、サイズ、およびおそらくタスクバーの位置だけです。

とにかく、 のような組み込みコマンドをオーバーライドするには、次のようにcmdalias プラグイン:qを使用できます。

:Alias q if\ winnr('$')>1||tabpagenr('$')>1||confirm('Really\ quit?',\ "&OK\\n&Cancel")==1|quit|endif

これは最後のウィンドウをチェックし (:q必ずしも Vim を終了するとは限りません)、確認を挿入します。

于 2012-09-24T07:49:08.120 に答える
4

:q次のようなものを使用して、コマンドを削除できます。

:cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'echo' : 'q')<CR>

これはコマンド モードで省略qされますが、最初の列にないecho場合、省略はトリガーされません。qこのように、edit qに省略されませんedit echo

于 2012-12-22T00:36:00.573 に答える
3

ConfirmQuit.vim : vim を終了しようとしたときに確認ダイアログを表示します

http://www.vim.org/scripts/script.php?script_id=1072

を使用してこれを適応させました

autocmd bufenter c:/intranet/notes.txt cnoremap <silent> wq<cr> call ConfirmQuit(1)<cr>

特定のファイルに対してこれだけが欲しかったので

于 2013-08-19T10:47:42.713 に答える