Клавиши со стрелками в режиме вставки в VIM - PullRequest
1 голос
/ 28 апреля 2020

Когда я нахожусь в режиме вставки в vim и использую клавиши со стрелками, он отправляет что-то вроде письма и возврат каретки. Например, при нажатии отправляется:

A

Похоже на A\n, но я не совсем точно знаю, какие символы / коды он отправляет. Почему это происходит, и есть ли способ отключить это?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

Обычная последовательность, отправляемая терминалом для стрелки вверх, равна <Esc>OA или ^[OA (последовательность ^[ представляет клавишу <Esc>, также эквивалентную Ctrl+[.)

Если ваш Vim не может распознать эту последовательность как стрелку вверх, в итоге он выполнит следующую последовательность: <Esc>, которая выйдет из режима вставки и go в обычный режим, затем O, чтобы вставить новую строку над текущей и go для режима вставки, затем вставьте литерал A, так как вы снова окажетесь в режиме вставки.

Вы можете подтвердить, что это действительно последовательность, которую ваш терминал отправляет Vim, набрав Ctrl+V, а затем стрелкой вверх в режиме вставки. (Ctrl+V в режиме вставки вставляет следующий символ буквально.) Я ожидаю, что вы увидите вставленную последовательность ^[OA.

Затем вы можете проверить, какой у вас Vim думает последовательность для стрелки вверх с командой :set <Up>. Я ожидаю, что вы увидите что-то вроде:

t_ku  <Up>           ^[OA

(t_ku - внутреннее имя параметра, соответствующего этой клавише со стрелкой вверх. Вы также можете использовать :set termcap, чтобы увидеть все настройки Vim относящиеся к терминалу, включая специальные коды клавиш.)

Если что-то из этого не соответствует ожиданиям, это объясняет, почему ваш Vim не распознает клавишу со стрелкой вверх. (Одно альтернативное объяснение состоит в том, что 'ttimeoutlen' установлено слишком коротким, но я бы сказал, что это маловероятно.)

Этими настройками обычно управляет 'term' настройка. По умолчанию он устанавливается исходя из того, что у вас есть для $TERM на вашей оболочке вне Vim.

Вы можете начать с того, что Vim считает 'term' и откуда оно установлено:

:verbose set term?
  term=screen-256color
        Last set from ~/.vimrc line 100

Часть :verbose просит Vim сообщить вам, откуда она установлена, и вы увидите, перезаписывает ли ее vimr c или один из ваших плагинов. Если Vim не показывает ничего из этого, это означает, что это происходит из переменной $TERM в вашей оболочке.

Итак, посмотрите, что $TERM установлено вне Vim, и посмотрите, кажется ли это правильным или нет , Вы устанавливаете это явно где-то? Будь то один из файлов инициализации оболочки или, возможно, из самого вашего эмулятора терминала?

Также может иметь значение, используете ли вы tmux или screen, и в этом случае вам следует дважды проверить, что $TERM также установлен правильно внутри Tmux или экран, но также снаружи it.

Надеемся, что все эти подсказки должны привести вас в правильном направлении, исправляя это. Если вы не можете это выяснить, опубликуйте свои выводы как комментарии к этому ответу, и я обновлю его, добавив более подробные c исправления, которые вы можете попробовать.

0 голосов
/ 28 апреля 2020

Возможно, вы находитесь в режиме совместимости с vi. попробуйте :set nocompatible

Если это заставит его работать так, как вам хотелось бы, поместите set nocompatible в начало вашего файла vimr c, чтобы настроить его на поведение по умолчанию.

...