У меня странная проблема с отображением нормального режима Esc.
Если вы создаете файл escmapvimrc
с содержимым:
set nocompatible
set showcmd " Doesn't affect the problem: just makes it easier to see
nnoremap <Esc> :noh<CR><esc>
А затем запустите vim, используя этот vimrc:
vim --noplugin -u escmapvimrc
Затем vim запустится в режиме ожидания оператора с c
командой, ожидающей дальнейшего ввода, отображением пустого файла и отображением командной строки :noh
.
Если вы удалите nnoremap
линию, то проблема исчезнет.
Если вы отлаживаете и проходите все этапы, вы получите следующий вывод:
Entering Debug mode. Type "cont" to continue.
/[...]/escmapvimrc
line 1: set nocompatible
>s
/[...]/escmapvimrc
line 2: set showcmd " Doesn't affect the problem: just makes it easier to see
>s
/[...]/escmapvimrc
line 3: nnoremap <Esc> :noh<CR><esc>
>s
/[...]/escmapvimrc
line 4: End of sourced file
>s
Press ENTER or type command to continue
После того, как вы нажмете ввод, появится экран запуска Vim, и под ним:
Entering Debug mode. Type "cont" to continue.
cmd: noh
>s
После этого экран запуска Vim исчезает, и вы находитесь в режиме ожидания оператора, как описано выше.
В чем дело?
РЕДАКТИРОВАТЬ: Поведение, как описано в Vim 7.3. В Vim 7.4.52 nmap
причины запуска Vim в режиме замены при запуске Vim без файла. (Однако, если Vim 7.4.52 запускается с файлом, он также запускается с выполняющейся командой c.) В любом случае, проблема исчезает, когда nmap удаляется.
источник
:noh
мне не показалась . То же самое с gvim не показывало такого поведения.nnoremap <c-l> :noh<cr><c-l>
/alksdjflaskj
чтобы очистить подсветку поиска, что также довольно быстро.Ответы:
Во время запуска Vim отправляет некоторые специальные коды терминала (которые обычно содержат
<esc>
ключ), чтобы определить несколько вещей (цвета, bs, ...). Если вы отобразили<esc>
это, это, скорее всего, запутает анализатор кодов возврата, и могут произойти странные вещи.Поэтому используйте приведенную выше карту только после того, как все настроено правильно (например, с помощью автокоманды VimEnter).
источник
'term'
опция установлена. Обычно это только во время запуска, но могут быть сценарии, в которых он установлен во время выполнения.VimEnter
сработалоТерминал Linux использует escape-последовательности ANSI (то есть строки символов, начинающиеся с
<Esc>
) для отправки специальных ключей в Vim и как часть протокола связи, с которым приложение запрашивает свои возможности. Ваше отображение мешает этому и тем самым приводит к такому «странному» поведению.Поэтому не наносите на карту
<Esc>
. Используйте другой ключ. Проблема менее выражена в GVIM, но я бы не стал ее рекомендовать.источник
<Esc><Esc>
?Попробуй это:
см. /programming//a/16027716/400545
источник
escapemapvimrc
файле на это, когда запуск Vim завершается, я нахожусь в режиме командной строки с командной строкой, содержащей следующее содержимое::83/94/95^G
(CTRL-G
в конце это литерал ). Этот бит ,:help
кажется, предполагают , что это может быть не самое лучшее время , чтобы настроить отображение:Note that this event may be triggered halfway executing another event, especially if file I/O, a shell command or anything else that takes time is involved.
Я попытался настроить автокоманду, чтобы установить сопоставление позже при запуске, но проблема все еще возникала. *
В конце концов я создал автокоманду, которая появляется при первом входе в режим вставки. Это, очевидно, не идеальное решение, но для меня это будет работать большую часть времени, и, похоже, это лучшее, что я могу сделать:
ОБНОВЛЕНИЕ : После использования более длинной версии, представленной ниже, без проблем в течение нескольких лет, я решил, что она, возможно, немного перегружена, и с тех пор я использовал эту гораздо более простую версию, которая вместо этого просто сбрасывает отображение каждый раз, когда вы входите в режим вставки:
Сопоставление не нужно сбрасывать каждый раз, когда вы входите в режим вставки, но оно также не причиняет Vim никакого вреда.
ОРИГИНАЛЬНАЯ ВЕРСИЯ :
* Я пытался прикрепив ее к различным событиям:
VimEnter
,BufReadPost
,BufWinEnter
, и дажеCursorMoved
(!), Но все они , кажется, огонь слишком рано.источник
TermResponse
автокоманду?t_RV
,t_u7
,t_RF
,t_RB
, И , возможно , другие.) Таким образом , это может также зависеть от вашего терминала