2012-09-23 19 views
10

リビルドする方法はありますか:vimでvimを誤ってvimを終了させないようにもっと複雑なコマンドにする方法はありますか?vimを誤って終了するのを防ぐにはどうすればいいですか?

+10

:qは十分に複雑ではありませんか?私はそれを誤って自分自身に打つことはありません... –

+0

私は@EricJに同意します。 ':'、 'q'と打ち込み、Enterを押します。 *終了しない共通のコマンドはそれに近いですか? –

+0

@KeithThompson - まあ、 'q:'はそれに近いです、話す方法です。私はそれがどれほど共通しているのか分かりません。 – Rook

答えて

5

あなたは何を恐れていますか?あなたがまだ変更を保存していないときに、Vimは(!コマンド修飾子なしで)終了させないので、GVIMのウインドウの位置、サイズ、多分タスクバーの位置だけが失われる可能性があります。

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

最後のウィンドウのために、このチェックを(:qは必ずしもVimを終了していない)、および、確認を挿入します。

とにかく、あなたはこのように、cmdalias pluginを使用することができ、:qのような組み込みコマンドを無効にするには。

+0

問題は、 'q'が'! 'に非常に近いことです。 – Qix

+2

@Qix:しかし、通常はShiftキーを押して '!'を得る必要があります。 ':q1'も':Q! 'も害を及ぼすことはありません。あなたが脂肪指向で苦しんでいるなら、とにかくVimで楽しいことはありません。 –

+0

私は部分的に面倒だった。これは私がVim、LOLを使用してきた数年の間に私が今まで脂肪を指していた 'q! 'の最初の例でした。 – Qix

2

あなたは:qコマンドを削除するには、このようなものを使用することができます。

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

これはコマンドモードでqechoにを略したが、qが最初にない場合は省略形がトリガすることはできません。カラム。この方法では、edit qedit echoと省略されません。

11

希望するものは:closeです。このためおかげで@Paradoxialを

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

:それは:qのような役割を果たしていますが、最後のウィンドウを閉じるせません。

http://vimdoc.sourceforge.net/htmldoc/windows.html#:close

あなたはcloseにマップするqコマンドのエイリアスを設定することができます:cabbrev trick。

2

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> 

を使用してこれを適応確認ダイアログを提供します

+0

ありがとう! しかし、ConfirmQuit.vimを使用するプレーンなvimを使用している人は、 "if has(" gui_running ")" –

8

私は知っている、それは非常に古い質問ですが、私は今日同じ質問があり、私はこの投稿を最初に見つけました。私は.vimrcに入れる短いスクリプトを開発した。

function! ConfirmQuit(writeFile) 
    if (a:writeFile) 
     if (expand('%:t')=="") 
      echo "Can't save a file with no name." 
      return 
     endif 
     :write 
    endif 

    if (winnr('$')==1 && tabpagenr('$')==1) 
     if (confirm("Do you really want to quit?", "&Yes\n&No", 2)==1) 
      :quit 
     endif 
    else 
     :quit 
    endif 
endfu 

cnoremap <silent> q<CR> :call ConfirmQuit(0)<CR> 
cnoremap <silent> x<CR> :call ConfirmQuit(1)<CR> 

私はこれが誰かを助けることを望む。

+1

ありがとうございます!私は別のプラグインを望んでいない! –

関連する問題