Могут ли терминалы обнаруживать <Shift-Enter> или <Control-Enter>?
Возможно ли, чтобы терминал обнаружил клавиши ⇧ Shift + Enter↵ или Ctrl + Enter↵?
Я пытаюсь настроить vim для выполнения сопоставлений клавиш, которые используют эти последовательности, и, хотя они отлично работают в gvim, они, похоже, не работают на какой-либо терминальной консоли.
Любопытно, что хотя Ctrl + Enter↵ не обнаружен в vim, отображение карт Enter↵ в Esc отображается правильно, но затем нажатие Ctrl + Enter↵ ведет себя как Enter↵!
Ответы
Ответ 1
Некоторые терминалы отправляют <NL>
при нажатии <C-Enter>
. Это эквивалентно отправке <C-J>
.
Чтобы узнать, что делает ваш терминал с помощью <Shift-Enter>
, <Ctrl-Enter>
и <Enter>
, перейдите к своему терминалу, введите <Ctrl-V>
(аналогично предложению sykora для vim) и введите интересующую вас последовательность в.
Используя gnome-terminal, я получаю следующее:
<Enter> : ^M
<S-Enter> : ^M
<C-Enter> : <NL>
Глядя на man ascii
, указывает, что ^M
дает последовательность <CR>
.
Ответ заключается в том, что он зависит от терминала, и там есть простой способ проверить.
Ответ 2
Gvim запускает собственный менеджер для обработки нажатия клавиш и поэтому может выбирать все различные комбинации клавиш. Vim зависит от конкретного терминала для передачи конкретного нажатия клавиши, поэтому обработка ключа только такая же хорошая или разнообразная, как и терминал.
Один из способов узнать, можете ли вы делать то, что вы хотите сделать, - это использовать ключ, чтобы узнать, что вставлено. например, Тип:
:<C-V><C-Enter>
т.е. на самом деле введите комбинацию, которую вы хотите нажать, набрав комбинацию Control-V. После этого сделайте то же самое для ввода, т.е.
:<C-V><Enter>
Если они выдают один и тот же код, терминал интерпретирует обе комбинации клавиш как один и тот же код ключа, и вы не можете связывать их, не входя в терминал.
В моем терминале (urxvt), Control-Enter, Shift-Enter и Enter (по себе) все производят символ ^ M, то есть я не могу сопоставить его без отображения другого. То же самое касается Control-Tab и Control-I, а Control-Space и Control - @
EDIT: используйте C-Q вместо C-V для Windows.