Bash: можно ли установить Ctrl-Backspace для удаления слова назад?


19

Когда в оболочке (bash) - я хочу, чтобы Ctrl-Backspace связывался для «удаления слова назад». Является ли это возможным?

Редактировать :

Я использую konsole- терминал в KDE.


2
Вопрос прямой, никаких претензий к этому нет. Я просто хочу прокомментировать, что зачастую стоит упростить «стандартные» привязки клавиш, которые уже существуют во многих приложениях, вместо того, чтобы настраивать их без реальной выгоды и с уверенностью никогда не видеть поведение в сторонних системах. Ctrl+wэто то, к чему ты должен привыкнуть, имхо.
Даниэль Андерссон

@ Даниэль Андерссон: или в качестве альтернативы - Вы можете разработать способ переноса Ваших настроек на чужой компьютер.
Adobe

Совместное использование точечных файлов - это решенная проблема, но она мало помогает на других, более или менее локальных компьютерах, где у вас достаточно открытые привилегии. Если вы работаете в чужой системе, у вас, скорее всего, нет свободы перенастраивать подобные вещи (по крайней мере, без того, чтобы вас не избили коллеги, которые также используют ту же машину :-)). Также каждое новое приложение будет нуждаться в особой обработке.
Даниэль Андерссон

6
У меня есть обратная проблема, я привык Ctrl-wкак «удалить предыдущее слово» в консоли, и сделать это инстинктивно даже в Eclipse или Chrome, где это означает закрыть вкладку / закрыть текущий файл. Довольно раздражает.
Ezequiel Muns

1
У меня такая же проблема с Chrome SShInATab. Как мне сделать Ctrl-W без Ctrl-W? :)
Риккардо SCE

Ответы:


11

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


9
Потому что я использовал Ctrl-Backspace в Emacs. Я знал о Ctrl-W. Alt-Backspace является новым для меня (+1).
Adobe

1
Хороший вопрос, @hellork. Вы можете перехватить control + backspace на X-сервере (через xmodmap) и сопоставить его с каким-то неиспользуемым символом (например, alt-backspace).

4
Раздражает то, что ctrl + backspace является действительно распространенным отображением для «удаления слова назад» в большинстве приложений с графическим интерфейсом в большинстве основных операционных систем. Аналогично, Ctrl + W широко распространен для «закрытия окна». Alt + w редко используется для чего-либо в GUI, о чем я могу думать. Стандартизация была бы отличной. Интересно, что будет большим нарушением, сменой терминалов или сменой графического интерфейса?
naught101

1
@naught, Control-W уже является клавишей стирания слова по умолчанию на терминалах Unix. Да, это противоречит соглашению Windows / GUI, но на самом деле оно появилось первым - через много лет. Виноват Microsoft!
Алексис

11

Я нашел эту тему через Google, но ответ был не то, что я хотел услышать. Итак, я поиграл:

На моем терминале нормальная отправка backspace ^H, в то время как ctrl + backspace отправляет ^?. Так что это должен быть случай повторного связывания, ^?чтобы удалить слово, которое по умолчанию доступно через Ctrl + W.

Первый (неудачная попытка):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

Итак, поэтому это должно работать:

$ bind '"\C-?":unix-word-rubout'

Однако это не ... кто-нибудь может объяснить?

Вторая (успешная) попытка:

$ bind '"\C-?":"^W"'

Где ^W- литерал / raw ^W(нажмите ctrl + V, затем ctrl + W, чтобы он появился).


Ваше первое решение сработало для меня, на самом деле! Второго нет.
Дрю Хоскинс

Вторая попытка, кажется, заменяет сам Backspace, а не Ctrl-Backspace?
user541686

7

Просто отредактируйте ваш ~/.inputrc(вам может понадобиться создать его или скопировать /etc/inputrcтуда), чтобы он содержал:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

Это также отобразит Ctrl+, Deleteчтобы удалить слово рядом с курсором.


Не работает для меня
Джонатан

6

Здесь есть несколько хороших ответов, но я решил это в Konsole с помощью Настройки-> Редактировать текущий профиль-> Клавиатура-> Редактировать, затем добавил отображение из Backspace+Controlв \x17. (Я нашел код ASCII для Ctrl-w, используя showkey --ascii.)


Спасибо за указание на вещь с showkey. Таким образом я понял, что ALT+Dдля удаления слово перед курсором будет соответствовать \x1b\x64.
Локи

Спасибо, это решило мою проблему. В моем случае мне нужно переназначить Alt + Backspace и его последовательность \x1b\x7f.
DDMC

3

Это зависит от того, что видит Баш. При обычном взаимодействии с терминалом bash не видит, какие клавишные модификаторы вы нажали, только получившийся символ. Backspace уже такой же, как control-H, например. Удерживать нажатой клавишу Shift или контроль не имеет значения.

ОДНАКО ваше терминальное приложение (xterm? Cmd? Terminal? Putty? Зависит от вашей ОС) может видеть ваши нажатия клавиш и может иметь способ сопоставить комбинацию клавиш control-backspace с чем-то, что bash может отличить от backspace.


Я обнаружил, что мой удар не видит забой. Но может быть, это возможно, чтобы это увидеть.
Adobe

@adobe, что ты имеешь в виду? Напечатайте 'stty' в своем терминале и затем прочитайте руководство об этом. Если ^ H установлен как ваш символ стирания, вы можете установить его на что-то другое ... если у вас есть веская причина.

1
Хороший пример того, как это сделать, можно найти на github.com/calj/gtconf/blob/master/zsh/zshrc . Konsole позволяет вам сделать это. Скопируйте один из файлов * .keytab из / usr / share / kde4 / apps / konsole / в ~ / .kde / share / apps / konsole и измените его, предложив приведенную выше ссылку, удалив строку «key Backspace» и добавление: key Backspace-Shift-Control : "\x7f"и key Backspace-Shift+Control : "\E[9;3~"также изменить строку заголовка, когда вы на это:, keyboard "Xfree4 Modlist"например. Затем вы можете добавить "\e[9;3~": backward-kill-word"в ~ / .inputrc
Адам

2

Попробуй это:

bind '"\C-_":backward-kill-word'

При желании добавьте следующее в ~ / .inputrc, чтобы сделать его постоянным:

"\C-_": backward-kill-word

Работает на bash 4.3.11 в Kubuntu 14.04


2
Control-backspace вряд ли будет таким же, как Control-underscore.
Томас Дики

1
Из всего, что я пробовал в этой теме, это сработало! Использование "GNU bash, версия 4.3.48 (1) -релиз (x86_64-pc-linux-gnu)" на bash в Windows / WSL
Маркус Джевринг

Это прекрасно работает для меня в Cygwin, используя GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin).
Загый

1

В Консоле:

  • щелчок Settings -> Edit current profile
  • нажмите вкладку «Клавиатура» -> [Edit...]
  • нажмите [Add]кнопку и под Key Combinationтип столбца Backspace+Ctrl. В Outputтипе столбца 0x08(который обычно является символом возврата)

Теперь вы должны иметь возможность сопоставить этот ключ с backward-kill-wordпомощью

# ~/.bashrc

bind '"\x08":backward-kill-word'

Благодарю. У меня работает, как минимум в xfce4-терминал.
Limon

0

На большинстве терминалов CTRL + W уже должен удалить слово назад. Это работает с xterm, и я думаю, что это работает с konsole. CTRL + W - это стандартная привязка клавиш в текстовой программе, которая будет работать с vim в режиме вставки, emacs и каждой оболочке.


5
У меня есть Ctrl-w для «закрытия вкладки» в Emacs, FireFox, Krusader - поэтому я также установил комбинацию закрытия вкладок в Konsole.
Adobe
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.