Получение <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 тоже)