При нажатии клавиши со стрелкой режим vim terminal отменяется

#vim

#vim

Вопрос:

При использовании режима терминала vim (доступ по :term ), если я заключу в две двойные кавычки, а затем нажму левую кнопку (например, если вы должны ввести, git commit -m "" а затем вернуться на один символ, чтобы начать сообщение), произойдет следующее:

  1. Терминал закрыт.
  2. Новая строка добавляется над курсором в буфере.
  3. Вводится режим вставки.
  4. Символ D вставлен.

Точная введенная последовательность :term<cr>git commit -m ""<left>

Почему происходит эта серия событий и как я могу предотвратить это в будущем?

Комментарии:

1. Непонятно почему, но управляющая последовательность, отправляемая клавишей со стрелкой влево ( ^[OD ), не передается в оболочку терминала, а скорее обрабатывается самой Vim.

2. Я не могу воспроизвести проблему (используя Vim 8.0 с исправлениями 1-1453) в подсистеме Windows для Linux в Windows 10. Когда я пытаюсь, он работает так, как ожидалось.

3. Вероятно, что-то не так с настройкой клавиш со стрелками в вашем терминале… Не уверен, что именно это такое. Но попробуйте использовать <C-b> в качестве обходного пути, он должен быть эквивалентен стрелке влево: :term<cr>git commit -m ""<C-b>

Ответ №1:

Оказывается, что в некоторых терминалах клавиши со стрелками представлены последовательностями клавиш escape, такими как стрелка влево, представленная Esc O D символом . В моем vimrc у меня было сопоставление tnoremap <esc> <c-w>:q!<cr> , которое должно было закрыть терминал, когда я нажал клавишу escape. Но из-за того, как vim интерпретировал мои последовательности клавиш со стрелками, он закрывал терминал, когда я нажимал любую из стрелок. Я решил это, изменив сопоставление на tnoremap <esc><esc> <c-w>:q!<cr> .

Более подробную информацию об этой ошибке можно найти здесь: https://github.com/vim/vim/issues/2216#issuecomment-337566816