Здесь работают два линейных редактора: редактор основных строк, предоставляемый ядром (редактор строки tty в каноническом режиме), и редактор строк bash (реализован через библиотеку readline). У обоих из них есть команда erase-to-previous-word, которая по умолчанию связана с Ctrl+ W. Ключ может быть настроен для канонического режима tty line editor через stty werase
; bash имитирует привязку ключа, которую находит в настройке tty, если она не переопределена в его собственной конфигурации.
werase
Действие в редакторе TTY линии не может быть настроено. Он всегда стирает (ASCII) слова, разделенные пробелами. Редко взаимодействовать с редактором строки tty - это то, что вы получаете, например, когда вы печатаете cat
без аргументов. Если вам нужны необычные привязки клавиш, вы можете запустить команду под инструментом вроде rlwrap, который использует readline.
Bash предоставляет две команды для удаления предыдущего слова : unix-word-rubout
( Ctrl+ wили как задано stty werase
), и backward-kill-word
( M-DEL
, т.е. Esc Backspace), который обрабатывает слово как последовательность буквенно-цифровых символов в текущей локали и_
. Если вы хотите Ctrl+ Backspaceстереть предыдущую последовательность буквенно-цифровых символов, не устанавливайте stty werase
, а вместо этого вставьте следующую строку в ваш .inputrc
:
"\C-h": backward-kill-word
Обратите внимание, что это предполагает, что ваш терминал отправляет символ Ctrl + H для Ctrl+ Backspace. К сожалению, это один из тех ключей без стандартной привязки (и, Backspaceв частности, беспорядок по историческим причинам).
Также есть симметричная команда, kill-word
которая по умолчанию связана с M-d
( Alt+ D). Чтобы связать его с Ctrl+ Delete, вам сначала нужно выяснить, какую escape-последовательность отправляет ваш терминал, а затем добавить соответствующую строку в ваш .inputrc
. Тип Ctrl+ Vзатем Ctrl+ Delete; это вставит что-то вроде того, ^[[3;5~
где инициал ^[
является визуальным представлением escape-символа. Тогда привязка
"\e[3;5~": kill-word
Если вас не устраивает ни одно из определений слова, вы можете предоставить свое собственное в bash: см. Запутанное поведение сочетаний клавиш в стиле emacs в bash