Ctrl-Backspace и Ctrl-Delete в bash

Включение Debian 8.3

stty werase '^H' 

или на Arch Linux 2/2016

 stty werase '^?' 

в .bashrc (например) делает Ctrl- Backspace удалять последнее слово в терминале. Тем не менее это не то же поведение, что и в современных приложениях с графическим интерфейсом (например, Firefox): он удаляет последнее пробельное слово – разделенное слово, а не последнее слово, разделенное пробелами или символами . : , ; " ' & / ( ) . : , ; " ' & / ( ) . : , ; " ' & / ( ) .

Можно ли заставить Ctrl- Backspace вести себя на терминале, аналогичном современным графическим приложениям? Кроме того, есть ли способ сделать CtrlУдалить удалить слово непосредственно перед курсором?

2 Solutions collect form web for “Ctrl-Backspace и Ctrl-Delete в bash”

Здесь есть две линейные редакторы: основной редактор строк, предоставленный ядром (редактор строк в стиле канонического режима), и редактор строк bash (реализованный через библиотеку readline). Обе они имеют команду erase-to-previous-word, которая по умолчанию привязана к Ctrl + W. Ключ может быть сконфигурирован для редактора строки tty в каноническом режиме через stty werase ; bash имитирует привязку ключа, которую он находит в настройке tty, если не переопределен в своей собственной конфигурации.

werase действие 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 предыдущую последовательность буквенно-цифровых символов, не устанавливайте stty werase и вместо этого помещайте следующую строку в свой .inputrc :

 "\Ch": backward-kill-word 

Обратите внимание, что это предполагает, что ваш терминал отправляет символ Ctrl + H для Ctrl + Backspace . К сожалению, это один из тех ключей без стандартного связывания (и Backspace, в частности, беспорядок по историческим причинам).

Также имеется симметричное командное kill-word которое по умолчанию привязано к Md ( Alt + D ). Чтобы связать его с Ctrl + Delete , вам сначала нужно выяснить, какую escape-последовательность отправляет ваш терминал, а затем добавить соответствующую строку в ваш .inputrc . Введите Ctrl + V, затем Ctrl + Delete ; это вставляет что-то вроде ^[[3;5~ где начальный ^[ является визуальным представлением escape-символа. Тогда связывание

 "\e[3;5~": kill-word 

Если вас не устраивает ни определение слова, вы можете предоставить свой собственный в bash: см. Запутанное поведение клавиш в стиле emacs в bash

Поведение символа WERASE в обработке терминала в готовом режиме жестко запрограммировано , по крайней мере, в Linux:

  if (kill_type == WERASE) { /* Equivalent to BSD's ALTWERASE. */ if (isalnum(c) || c == '_') seen_alnums++; else if (seen_alnums) break; } 

Таким образом, слова – буквы, цифры и подчеркивание. Так будет всегда в терминале Linux, когда приложение, которое выполняет свою собственную обработку в режиме готового режима, не работает.

версия readline (используемая bash и другими), кажется, немного отличается от версии ядра, но она также выглядит жестко запрограммированной :

Слова состоят из букв и цифр.

Но это не похоже на то, что bash самом деле делает для меня: foo+bar^W стирает все, а не только bar . Об этом больше информации.

  • Konsole работает, gnome-terminal нет?
  • Как перейти к следующему или предыдущему слову с помощью клавиш CTRL + со стрелками в консоли?
  • Отметьте дескриптор как терминал для теста -t
  • Удалите каталог изнутри с помощью интерфейса командной строки
  • Почему команда `users` возвращает разных пользователей в зависимости от того, ssh я или открываю новый терминал?
  • Хранение терминала xterm в режиме реального времени на crunchbang linux debian wheezy
  • Readline: привязка последовательности escape ANSI к ключу
  • параметр ядра init = / bin / bash не работает? (RHEL7, тест RHCSA)
  • Автоматическое завершение терминала OSX bash - нечетное поведение на двойной вкладке
  • Найти файлы дубликатов файлов и заглавные буквы rm
  • Перезапуск X в CentOS 5
  • Linux и Unix - лучшая ОС в мире.