Отображение Ctrl-Backspace в терминаторе

8

Я недавно начал использовать Vim. Из предыдущих редакторов я привык удалять слова целиком, нажимая Ctrl- Backspace. Посмотрев документацию, я обнаружил, что это было сделано нажатием Ctrl- wв Vim. Проблема в том, что после привыкания к нажатию Ctrl- wя начал закрывать вкладки и чаты каждый раз, когда неправильно пишу слово (при написании этого вопроса я закрывал эту вкладку 5 раз). Поэтому я проверил, как сопоставить ключи в Vim, и попробовал это:

:imap <C-BS> <C-w>

К сожалению, это не сработало. После небольшого исследования я обнаружил, что терминал не различает Ctrl- Backspaceи Backspace. Я видел некоторые хаки и патчи, чтобы исправить эту проблему, но я не мог заставить их работать на терминаторе (это эмулятор, который я хочу использовать).

Есть ли способ сопоставить Ctrl- Backspaceв Vim при использовании терминатора?

user1026044
источник
2
Добро пожаловать в ад Вим.
romainl
2
Мне нравится тот факт, что этот ад довольно продуктивен и может быть улучшен с помощью патчей.
Инго Каркат
Кстати, я собираю подобные вопросы, чтобы надеяться, что смогу доказать, что именно эта проблема решается в Vim 8.0. Я действительно хочу, чтобы все больше и больше унифицированных кандидатов на карты тоже.
Инго Каркат
Эта проблема не может быть исправлена ​​в vim (AFAIK). Это зависит от терминала, в котором запущен vim. Для широкого круга пользователей, использующих vte (Gnone Terminal, Mate Terminal, Guake и т. Д.), Эта проблема привлекла некоторое внимание в последнее время и может быть исправлена ​​в ближайшее время. Посмотрите эту ошибку гнома: bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr
@IngoKarkat Смотрите выше комментарий. ^
trusktr

Ответы:

8

Из-за того, что ввод с клавиатуры обрабатывается внутри, к сожалению, сегодня это вообще невозможно. Некоторые сочетания клавиш, такие как Ctrl+ не алфавитный, не могут быть сопоставлены, и Ctrl+ буква против Ctrl+ Shift+ буква не может быть различена. (Если ваш терминал не отправляет для него отдельный код termcap , чего большинство не делает.) В режиме вставки или командной строки попробуйте ввести комбинацию клавиш. Если ничего не происходит / вставлено, вы не можете использовать эту комбинацию клавиш. Это также относится к <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>и т. Д. (Единственное исключение - <BS>/ <C-H>.) Это известная проблема и предмет различных обсуждений vim_dev и IRC-канала #vim.

Некоторые люди (прежде всего Пол ЛеоНерд Эванс) хотят это исправить (даже для консоли Vim в терминалах, которые поддерживают это), и выдвинули различные предложения, ср. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Но на сегодняшний день никаких патчей или добровольцев еще не появилось, хотя многие выразили желание иметь это в будущем выпуске Vim 8.

Инго Каркат
источник
Спасибо за быстрый ответ. Я думаю, мне просто нужно привыкнуть использовать ctrl-w для vim и ctrl-backspace для браузеров.
user1026044 25.02.13
Хорошая вещь о Ctrl-W в том, что он также работает в Bash и т. Д.
Инго Каркат
Да, я знаю. Но вы все равно должны использовать ctrl-backspace для всего остального, и тот факт, что ctrl-w кажется стандартным для закрытия вкладок и окон везде, делает это раздражающим. Я, наверное, через некоторое время привыкну.
user1026044 25.02.13
Но можно ли это решить исключительно в базе кода vim? Как любой код в базе кода vim различает backspace и ctrl + backspace, если терминал, на котором он работает, посылает vim один и тот же точный ввод для любой комбинации клавиш? Похоже, это то, что должно быть исправлено в терминале, в котором работает vim, а не в vim. Например, Guake отправляет ^?как backspace, так и ctrl + backspace, что делает их (AFAIK) неразличимыми. xterm, с другой стороны, отправляет ^Hbackspace и ^?ctrl + backspace, делая их различимыми.
trusktr
Но, к сожалению, в xterm функция backspace ( ^H) неотличима от ctrl + h ( ^H). Возможно, мы сможем создать новую escape-последовательность, чтобы различать все три? Я не знаю, насколько это легко, но кажется, что это было бы безопасно сделать, потому что с текущим состоянием вещей (некоторые терминалы используют ^?для возврата, другие ^H, и наоборот), я не могу представить себе очень много терминальных приложений (если есть вообще) рассмотрим сценарий ctrl + backspace (он был бы полностью неопределенным из-за разнообразия терминалов) ...
trusktr