15

を押して挿入モードを終了するEscと、Vim が実際に通常モードに戻る前に 0.5 秒の一時停止があります。

jを押した後のような通常モードコマンドを押すと、通常モードEscコマンドがすぐに(上記の待機なしで)実行されるため、通常、これは問題になりませんが、マッピングinoremap <Esc> <Esc>:w<CR>があるため、挿入モードを終了するたびにファイル書かれた。を押したときにすぐに書き込みが行われるようにしたいのですEscが、代わりにその 0.5 秒の一時停止があります。

一時停止の原因は、Vim が次の入力を待ってから、単一のシンプルなEsc. これは、最初の文字が であるマッピングがどこかにあるためであるに違いありませんが<Esc>、私が調べたところ、.vimrcそのようなマッピングはありません。

さらに、走っ:map <Esc>て帰ってきNo such mappingた。では、そのようなマッピングがない場合、なぜ Vim は次の入力を待っているように見えるのでしょうか? また、その動作を回避するにはどうすればよいでしょうか?


追加情報

これは再現できないようです。そのため、誰かが本当にこの問題の真相を知りたい場合に備えて、さらに詳しい情報を以下に示します。

私はSteve Francia のspf13Vim のディストリビューションを使用しており、その上に私自身.vimrc.localのものがあります。また、Vundle を使用していくつかの追加プラグインをインストールしました。

注: .vimrc.localは の最後に供給され.vimrcます。

4

4 に答える 4

16

更新 (2014 年 3 月 19 日)

ドキュメントのヒントとコツのセクションから、Powerline<Esc>の厚意により、で始まるすべてのマッピングを探し出すよりもはるかに優れた解決策を見つけました。これをあなたのどこかに入れてください:.vimrc

 " leave insert mode quickly
  if ! has('gui_running')
    set ttimeoutlen=10
    augroup FastEscape
      autocmd!
      au InsertEnter * set timeoutlen=0
      au InsertLeave * set timeoutlen=1000
    augroup END
  endif

これにより、挿入モードで開始するマッピングを使用できなくなることに注意してください。ただし、これ<Esc>により問題が解決されるため、これらのマッピングはいずれにしても存在しないはずです。


問題を引き起こしているspf13の行を見つけました.vimrc

" Fix home and end keybindings for screen, particularly on mac
" - for some reason this fixes the arrow keys too. huh.
map ^[F $
imap ^[F $
map ^[H g0
imap ^[H g0

以前にそれらを見つけることができなかった理由は、それらが を使用してマッピングされていなかったため<Esc>です^[。非常に刺激的です!これが、同様に不満を抱いているspf13ユーザーの助けになることを願っています:)

アップデート:

これらのマッピングを削除してもうまくいかない場合は、おそらくプラグインからのマッピングです。

:verbose map <Esc>を含むすべてのマッピングのリストを取得するために入力しますEsc。このverbose部分は、マッピングが設定された場所を出力するよう Vim に指示します。これは、問題の原因を突き止めるのに役立ちます。

また、このコマンドunmap <Esc>が役立つ場合もありEscます。キーのマッピングをすべて削除します。

unmapすべてのモードでマッピングが削除されるわけではないことに注意してください。詳細については、入力:h unmapしてください。

于 2012-11-21T02:08:09.227 に答える
9

私の場合、その遅延を注入したのは tmux でした (これは私にとって完全な驚きでした!)。

に追加set -g escape-time 0して修正しましたtmux.conf


これは著者にとって厳密には役に立たないかもしれませんが、さまざまなキーワードの組み合わせでこの問題を検索すると、この質問が最初に出てくるので、誰かの役に立てば幸いです.


出典:ここからの最初のコメント。

于 2016-02-14T09:40:19.003 に答える
7

あなたが説明したマッピングの問題が何であるか正確にはわかりませんが、私の意見では問題ないはずです。しかし、達成したいことはより良い方法で達成できると思います。あなたのマッピングは基本的に、InsertLeaveVim が実際に既に組み込んでいるイベントを作成しようとする試みです!

次のようなものを に追加してみてください.vimrc:

au InsertLeave * if &mod && expand('%')!=''|write|endif

追加のボーナスとして、これはファイル名があり、実際に変更された場合にのみバッファを保存します。

于 2012-11-15T19:47:26.187 に答える