Vim では、Visual モードのときにEsc2 回押して終了し、選択をオフにする必要があります。を 1 回押した後Esc、選択がオフになるまで 2 秒待たなければなりません。
Escを押したときにすぐにビジュアル モードを終了するにはどうすればよいですか?
Vim では、Visual モードのときにEsc2 回押して終了し、選択をオフにする必要があります。を 1 回押した後Esc、選択がオフになるまで 2 秒待たなければなりません。
Escを押したときにすぐにビジュアル モードを終了するにはどうすればよいですか?
次のコマンドを実行すると、次のことがわかりました。
set timeoutlen=1000 ttimeoutlen=0
http://www.johnhawthorn.com/2012/09/vi-escape-delays/を参照してください。
インゴが説明したように。ソリューションを投稿すると思っただけです: https ://github.com/Greduan/dotfiles/blob/47f92e4db29d4ead778d877a85082b271de130ed/vim/vimrc.vim#L332-L346
かなりうまく機能します。それは私にとっても少し混乱しているので、私は本当に説明することはできませんが、コードはそれ自体をかなりうまく説明しています。
ポイントは、それが機能することです<Esc>
。ターミナル上でもすぐに機能します。マッピングが設定されている場合<Esc>
は、それらを実行する時間も与えられると思います。しかし、よくわかりません。
編集
少し勉強して、説明できるようになりました。基本的に、GUI(MacVimなど)を使用していない場合は、挿入モードに入るttimeoutlen
と0に設定されます。つまり、クリックするとすぐに機能します<Esc>
。ただし、通常モードに入るttimeoutlen
と、を希望する数に設定し、を使用してマッピングを実行できるようになります<Esc>
。
完璧な解決策だと思います。挿入モードのマッピングがある場合は、コントロールなどを使用するからです。
編集2
コードは次のとおりです。
set timeout " Do time out on mappings and others
set timeoutlen=2000 " Wait {num} ms before timing out a mapping
" When you’re pressing Escape to leave insert mode in the terminal, it will by
" default take a second or another keystroke to leave insert mode completely
" and update the statusline. This fixes that. I got this from:
" https://powerline.readthedocs.org/en/latest/tipstricks.html#vim
if !has('gui_running')
set ttimeoutlen=10
augroup FastEscape
autocmd!
au InsertEnter * set timeoutlen=0
au InsertLeave * set timeoutlen=1000
augroup END
endif
時間の経過とともに、GUIが実行されていないという条件を取り除きましたが、私が知る限り、GUIは引き続き機能します。
代わりにを使用することで簡単に回避できますが、で始まるマッピングが原因である<C-c>
のタイムアウトを修正することをお勧めします。<Esc>
<Esc>
'timeoutlen'
これは必ずしも「実際の」マッピングである必要はありません。多くの端末の回避策 (特定のキーを機能させるなど) では、このようなマッピングを設定することをお勧めします。(残念ながら、これは難しく複雑な問題です。)
次の方法でマッピングを見つけることができます。
:verbose map <Esc>
<ESC> グローバルまたはビジュアル モードにバインドされたマッピングはありません (:verbose vmap <ESC> を呼び出しても結果は得られません) が、ビジュアル モードを終了するときにまだかなりの遅延があります。vimrc を使用しない新規インストールでも遅延が発生します。<Cc> を使用すると、遅延なくビジュアル モードが終了します。
<Cc> を押してモードを終了するのは好きではないので、現在、ビジュアル モードで <ESC> を <Cc> にマップしています。これにより、<ESC> を使用して遅延なくビジュアル モードが終了します。
:vmap <ESC> <C-c>
または、次の行を vimrc に追加します。
vnoremap <ESC> <C-c>
グローバル モードまたはビジュアル モードのマッピングが <ESC> にバインドされている場合、これは機能しません。