Получение <ctrl> + <backspace> для удаления слов в gnome-терминал и режим вставки vim

10

Кажется, что ctrl+ Wудаляет назад одно слово за раз. Это здорово, но мне бы очень понравилось, что это работает с ctrl+, backspaceкак и большинство других приложений.

Какой лучший способ сделать это? Мне нужно, чтобы изменения влияли на команды терминала gnome, командную строку vim и графический интерфейс vim.

ребро
источник
1
В vim вы можете нажать D, B, и он сделает то же самое. Тем не менее, я тоже скучаю по этой функции в терминале, потому что вы должны выйти, и она не работает при работе в режиме вставки. Удивительный совет для CTRL + W.
Mchid

Ответы:

7

Обратите внимание, что это будет работать в терминале и в режиме emacs по умолчанию (который вы используете, если Ctrl+ Wудаляет предыдущее слово за вас). Он не будет работать в vi-режиме bash и не повлияет на сам vi / vim. Поэтому это только частичный ответ, но лучшее, что может предложить этот пользователь emacs.


Подобные вещи управляются readlineбиблиотекой, поведение которой можно контролировать с помощью ~/.inputrc. Отредактируйте (или создайте, если он не существует) ~/.inputrcи добавьте эту строку:

"\C-H":"\C-W"

Теперь откройте новый терминал, и он должен работать.

объяснение

Это \C-Hна самом деле Control+ BackSpace. Вы можете увидеть коды клавиш, нажав Ctrl+, Vзатем клавишу, которую вы ищете. Вы увидите, что BackSpaceвозвращается ^H.

Теперь должно быть возможно связать Control+ BackSpaceс функцией bash, которая удаляет предыдущее слово ( backward-kill-wordили unix-word-rubout) с помощью "\C-H": backward-kill-word. Однако я не могу заставить это работать. Он отлично работает с разными ключами ( "\C-E": backward-kill-wordнапример, заставляет Ctrl+ Eудалить предыдущее слово), но по некоторым причинам я не могу заставить его работать BackSpace.

Таким образом, в качестве обходного пути мы просто отображаем Ctrl+ Backspaceна Ctrl+, Wкоторый уже сопоставлен backward-kill-word. Итак, когда вы нажимаете Ctrl+ Backspace, это будет переведено в Ctrl+, Wчто, в свою очередь, отправит backward-kill-word. Я понял идею этого обходного пути из этого поста SU .

terdon
источник
4

Вплоть до самого последнего времени , гном-терминал испускается один и тот же код на Backspaceи Ctrl+ Backspace, следовательно , вы не можете отличить два в приложении.

Это было исправлено в vte-0.42, который является частью Gnome 3.18, выпущенного этой осенью.

Если вы используете Wily, вы можете найти обновленные пакеты в Gnome3 Staging .

Эгмонт
источник
я могу заставить это работать в верном, не добавляя тот огромный PPA?
Ciprian Tomoiagă
Не без загрузки, исправления, компиляции и установки пакета libvte 2.90, который соответствует trusty. Патч находится на bugzilla.gnome.org/show_bug.cgi?id=733246 .
egmont
3

Вместо этого используйте Alt+ Backspace: он работает так же, как Ctrl+ Backspaceи не требует никакой настройки.

Марко Лацкович
источник
1

Это работает на моей машине. Просто убедитесь, что вы используете tmux от master и nvim из linuxbrew и control + backspace работает в bash и vim!

(Получить bash от linuxbrew тоже)

Фабио Сантос
источник