Привязка назад-kill-word к Ctrl + w

Я пытаюсь перейти от длительного использования Tcsh к недавнему исследованию Bash.

Мне удалось перенести все мои любимые функции, за исключением Ctrl + w, который обрабатывает пробелы и слэши в качестве границ слов, скорее всего, слова «назад-убить». Однако в Bash readline удаляет весь путь до первого места, удаляя все слэши между ними.

Я пробовал много различных комбинаций \ Cw: backward-kill-word в обоих .inputrc и .bashrc, используя bind, но я не могу заставить его работать так, как я хочу.

Достаточно смешно, через Putty из Windows на работе я могу использовать Alt + Backspace, который, как сказано в руководстве, является привязкой по умолчанию, для получения точного поведения, которое я хочу. Но в Terminal.app на домашних компьютерах Mac это не работает. То же самое касается любого сервера FreeBSD или Linux, с которым я случайно подключился в Terminal.app.

Поэтому я обращаюсь к суперпользователю за помощью.

readline не связывается с Ctrl- W, поскольку по умолчанию он обрабатывается драйвером терминала:

 $ stty -a (...) werase = ^W; (...) 

Чтобы отключить это, вам нужно запустить (в ~/.bashrc ):

 stty werase undef bind '"\Cw": backward-kill-word' 

.inputrc здесь не поможет, так как он читается, когда Ctrl- W по-прежнему назначается werase .

Также обратите внимание, что ключевые слова формата \Cw должны быть заключены в двойные кавычки, как указано выше.


Различные терминалы могут обрабатывать AltBackspace по- разному.

  • PuTTY и GNOME Terminal (с настройками по умолчанию) отправляют 1b 7f ( ESC DEL )
  • metaSendsEscape: true с metaSendsEscape: true отправляет 1b 08 ( ESC BS ).
  • metaSendsEscape без metaSendsEscape отправляет 88 ( HTS или BS с максимальным набором бит).

Xterm имеет несколько настроек для управления поведением клавиши Alt (в общем, Meta в Xterm и X11). С помощью metaSendsEscape удерживание Alt будет префикс нажатия клавиши ESC (hex 1b ). Без настройки (режим по умолчанию), Alt установит самый старший бит входного символа, в результате чего появятся специальные символы. (Например, AltN приводит к ESC n и î соответственно.)

Насколько я помню, Terminal.app также имеет аналогичную настройку для управления поведением Meta / Alt / what-Macs-use.

Gravity писал, что это невозможно контролировать в файле .inputrc , но это неверно.

Если вы set bind-tty-special-chars off в свой .inputrc , вы можете настроить поведение специальных символов терминалов.

Например:

 set bind-tty-special-chars off "\Cu": kill-whole-line "\Cw": backward-kill-word 

Для записи ответ, который применяется к iTerm2, заключается в том, чтобы установить AltBackspace (или Opt ⌥ на Mac) для отправки шестнадцатеричных кодов 0xb1 и 0x7f , чтобы выполнить действие « backward-kill-word которое обрабатывает не буквенно-цифровые символы Как разделители.

Для отличия, вот поведение, которое я описываю, в котором нажатие Opt ⌥ одно время меняет это:

echo "/example/filepath/[email protected]:meh

к этому:

echo "/example/filepath/[email protected]:

И последующие прессы Opt ⌥ :

echo "/example/filepath/[email protected]

echo "/example/filepath/with_non-alpha.

echo "/example/filepath/with_non-

echo "/example/filepath/with_

echo "/example/filepath/

Вот что выглядит в iTerm2: Введите описание изображения здесь

Итак, конкретный для Putty и Terminal, ответ грамотности велик. Но, потратив неловкое количество времени на поиск того, как применить настройку в iTerm2, этот пост суперпользователя, похоже, наиболее часто встречается, поэтому он, как представляется, несет ответственность за предоставление соответствующей информации, поскольку это относится к iTerm2 в качестве ответа на этот вопрос.

Interesting Posts

Не удалось найти файл объявления для модуля ‘module-name’. ‘/path/to/module-name.js’ неявно имеет тип “any”

Как добавить значок в приложение, построенное с помощью Eclipse Galileo C и MinGW?

Android getIntent (). GetExtras () возвращает null

Какая большая разница в производительности между 1066 МГц и 1150 МГц RAM?

Сжатая файловая система чтения-записи в одном файле?

XPath: выберите всех следующих братьев и сестер, пока другой брат

Как отключить Aero Shake в Windows 7?

Установка кнопки FlatStyle в WPF

Linux: что является «наиболее подходящим» каталогом для размещения exectuable для всех пользователей?

Исключение OutOfMemory при загрузке растрового изображения из внешнего хранилища

Java: Как создать фильм из массива изображений?

Чтение вывода команды внутри процесса su

Как я могу конвертировать пакетный скрипт Windows в .exe?

Переименуйте группу файлов с помощью одной команды

Как остановить VLC от кражи кнопок громкости

Давайте будем гением компьютера.