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

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

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

5 ответов

Обратите внимание, что это будет работать в терминале и в режиме 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.

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

[для гном-терминала]

использоватьsttyинструмент, хорошо подходит для визуализации того, что bashсочетания клавиш привязаны.

посмотрите ваши текущие сочетания клавиш bash (вывод моей системы):

      stty -a

мой вывод:

      speed 38400 baud; rows 41; columns 76; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon
-ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc

weraseотвечает за удаление всего слова.

запуск этого установит ctrl+ backspaceчтобы стереть слово при нажатии.

      stty werase \^H

!note: это установит эту опцию onlyк вашему текущему сеансу терминала/bash. чтобы применить это permanentlyвам нужно добавить предыдущую команду в .bashrcфайл в конце.

настройки из .bashrc будут загружаться каждый раз, когда вы открываете gnome-терминал.

после этого вы готовы идти. наслаждаться.

[для вим и неовим]

просто вставьте это в init.vimили же vim.rc:

      " Map Ctrl-Backspace to delete the previous word in insert mode.
" solution: https://vim.fandom.com/wiki/Map_Ctrl-Backspace_to_delete_previous_word
noremap! <C-BS> <C-w>
noremap! <C-h> <C-w>

это будет работать в режиме вставки, конечно. это основной момент определения этого для режима вставки.

работает в neovim 0.5а также lowerверсиях, а также в standard vim.

До недавнего времени gnome-терминал генерировал один и тот же код в Backspace и Ctrl+Backspace, поэтому вы не можете различить их в своем приложении.

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

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

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

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

Другие вопросы по тегам