Gnome-терминал + сопоставления Vim и Ctrl-Shift


11

Можно ли отобразить последовательность с помощью Ctrl- Shiftв Gnome Terminal?

Я пытаюсь добавить сопоставления

  • map <C-S-[> gT
  • map <C-S-]> gt

и это не работает. Как это сделать?

Каким-то образом я нанес на карту <C-S-]>, но оказалось, что это не так <C-S-]>, но <C-]>, похоже, он не распознает Shift в этой последовательности. Это неправильно настроено или это вина терминала gnome?

Помимо. Отображение <C-[>после нажатия выглядит так, будто vim ждет. Я предполагаю, что это тайм-аут отображения, но как избавиться от этого тайм-аута, когда я нажимаю точно, <C-[>и я не хочу нажимать что-либо еще?

Я только начал изучать vim, извините, если что-то явно не так в этих сопоставлениях.

Ответы:


8

Я думаю, что проблема здесь в том, что вы пытаетесь заставить vim, который ожидает запуска в терминале, распознать последовательность CTRL-SHIFT. Хотя X может распознавать такие комбинации, приложения, работающие в терминале (или, в наши дни, в эмуляторе терминала), не могут. Это связано с тем, что исторически терминалы могли только отправлять и получать семи- или восьмибитные последовательности данных ASCII через последовательное соединение (хотя это может включать в себя «escape-последовательности», которые позиционируют курсор, прокручивают или удаляют строки, меняют цвет и другие полезные последствия).

В наборе символов ASCII есть 32 «Кода управления», включая знакомые от CTRL-A до CTRL-Z. Но нет соответствующих кодов ASCII для «CTRL-SHIFT» от A до Z. Теперь сам gnome-терминал может распознавать эти коды (например, CTRL-SHIFT-V будет вставлять текст из буфера обмена), но vim не будет возможность иметь прямой доступ к нему.

Конечно, возможно (я не знаю), что эмулятор терминала может быть настроен на преобразование нажатий клавиш CTRL-SHIFT в escape-последовательность, которая затем может быть распознана отображением vim.

=======

ОБНОВИТЬ

Возможно, вас заинтересует gvim, графическая версия vim, которая запускается как программа X, а не как терминальная программа. Может быть, gvim сможет понять коды CTRL-SHIFT?


4

Кажется, проблема с GNOME Terminal, который не позволяет определенные комбинации с Ctrlключом. Поиск в Интернете показывает много случаев этого.

На всякий случай, если вы не знаете, Ctrl+ page up/ page downциклически переключается между вкладками.


3

Как указал Бартлби , это терминальное ограничение, потому что vi видит коды клавиш одинаковыми.

Для таких терминалов, как xtermвы можете изменить это. Для gnome-terminal которого игнорируются настройки ресурсов X, я не знаю, как сделать следующее:

Этот вопрос SO охватывает ту же тему, и этот пример показывает, как он используется для сопоставления нескольких ключей в .Xresourcesфайле. Например:

XTerm*vt100.translations: #override \
  Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n\
  Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n\ 
  Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")  

Теперь у нас есть разные ключевые последовательности, входящие в vi для « Ctrlaпротив» CtrlShifta, « Ctrlbпротив» CtrlShiftb, « Ctrlfпротив» CtrlShiftf.

Теперь мы можем отобразить их по-другому в ~/.vimrc:

map <ESC>[66;5u   :echo "ctrl-shift-b received"<CR>
map <ESC>[70;5u   :echo "ctrl-shift-f received"<CR>
map <C-b>         :echo "ctrl-b received"<CR>
map <C-f>         :echo "ctrl-f received"<CR>

Первоначальный вопрос был о gnome-terminal, тогда как ваш ответ относится к xterm.
egmont

@egmont: Хорошая точка зрения и упущение на моей стороне. В соответствии с этим ответом.Xresources игнорируются gnome-terminal. Это неудачно. Обновленный ответ.
ЧФ

Немного перефразировал / переставил этот ответ как пару вопросов и ответов в SuperUser , потому что я, вероятно, должен удалить его здесь, потому что он не применим к терминалу аскера.
ЧФ


1

В gnome-terminalescape-последовательности, сгенерированные ключами, не настраиваются. Для многих ключей Ctrl+ keyи Shift+ Ctrl+ keyгенерируют разные последовательности; к сожалению, [а ]они нет, так что вы не можете их различить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.