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

1662
user1026044

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

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

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

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

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

1 ответ на вопрос

8
Ingo Karkat

Из-за того, что ввод с клавиатуры обрабатывается внутри, к сожалению, сегодня это вообще невозможно. Некоторые сочетания клавиш, такие как 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 11 лет назад 0
Хорошая вещь о Ctrl-W в том, что он также работает в Bash и т. Д. Ingo Karkat 11 лет назад 0
Да, знаю. Но вы все равно должны использовать ctrl-backspace для всего остального, и тот факт, что ctrl-w кажется стандартным для закрытия вкладок и окон повсюду, делает это раздражающим. Я, наверное, через некоторое время привыкну. user1026044 11 лет назад 0
Но может ли это быть решено исключительно в базе кода vim? Каким образом любой код в базе кода vim различает backspace и ctrl + backspace, если терминал, на котором он работает, посылает vim одинаковый точный ввод для любой комбинации клавиш? Похоже, это то, что должно быть исправлено в терминале, в котором работает vim, а не в vim. Например, Guake посылает `^?` Для backspace и ctrl + backspace, что делает их (AFAIK) неразличимыми. xterm, с другой стороны, отправляет `^ H` для возврата и` ^? `для ctrl + backspace, делая их различимыми. trusktr 11 лет назад 0
Но, к сожалению, в xterm, backspace (`^ H`) неотличим от ctrl + h (` ^ H`). Возможно, мы сможем создать новую escape-последовательность, чтобы различать все три? Я не знаю, насколько это легко, но кажется, что это было бы безопасно сделать, потому что с текущим состоянием вещей (некоторые терминалы используют `^?` Для возврата, другие `^ H` и наоборот) I Я не могу представить, чтобы очень многие терминальные приложения (если они вообще были) рассматривали сценарий ctrl + backspace (он был бы полностью неопределенным из-за разнообразия терминалов) ... trusktr 11 лет назад 0
(продолжение) и, таким образом, добавление некоторой новой escape-последовательности не сильно сломало бы, если вообще что-нибудь. Это только добавило бы способ различать Ctrl + Backspace для всех! trusktr 11 лет назад 0