Как пояснил Инго. Просто подумал, что я выложу решение: https://github.com/Greduan/dotfiles/blob/47f92e4db29d4ead778d877a85082b271de130ed/vim/vimrc.vim#L332-L346
Работы очень хорошо. Для меня это немного запутывает, поэтому я не могу объяснить, но код очень хорошо объясняет.
Пункт он работает, он просто делает <Esc>
работает сразу же, когда на терминале. Я считаю, что если у вас есть сопоставления, установленные на <Esc>
, это даст вам время, чтобы сделать это. Однако я не уверен.
EDIT
Училась немного, и теперь я могу это объяснить. В принципе, если вы не используете графический интерфейс (например, MacVim), тогда, когда вы входите в режим вставки, ttimeoutlen
будет установлен в 0. Это означает, что как только вы нажмете <Esc>
, это сработает. Однако, как только вы в нормальном режиме, он установит ttimeoutlen
на номер, который вы предпочитаете, позволяя делать сопоставления с <Esc>
.
Идеальное решение Я думаю, поскольку, если у вас есть отображения в режиме вставки, он будет использовать элемент управления или что-то в этом роде.
EDIT 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
Со временем я удалил условие, что графический интерфейс не работает, и он все еще работает, насколько я могу судить.
у вас есть сопоставление с клавишей ESC? – Kent