В bash, как сделать control-delete значком kill-word? - PullRequest
3 голосов
/ 24 марта 2009

Bash использует readline, и readline может удалить слово справа от курсора с помощью «kill-word».

Проблема в распознавании нажатия клавиши control-delete. Когда я нажимаю их в bash, на экране выводится «5 ~». Я мог бы просто связать это, но это означало бы, что однажды мне нужно будет набрать "5 ~", и вместо этого будет удалено слово справа! Поэтому я бы предпочел найти правильную последовательность управления.

Я гуглил, и довольно много ресурсов обсуждают ключ "delete", но ни один из найденных мной средств не обсуждает ключ "control-delete". Я экспериментировал со многими вариантами, но ничего не работает.

Худшее - это часы, которые я потратил на эту утомительную, бессмысленную работу, когда это действительно должно быть проблемой.

РЕДАКТИРОВАТЬ: Это через X, так что, возможно, есть решение с xev и xmodmap

Ответы [ 5 ]

12 голосов
/ 24 марта 2009

На моей машине, нажав Ctrl-V, Ctrl-Delete выводит это:

^[[3;5~

Экранирующий символ ^[ может быть заменен на \ e, так что вы можете затем использовать bind для bash (например, в ~/.bashrc):

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

Или вы можете добавить следующее к вашему ~/.inputrc, чтобы Ctrl-Delete выполнял kill-word в любой программе, использующей readline:

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

Это будет связывать только клавишу Ctrl-Delete, вам не нужно беспокоиться о том, что произойдет, если вам нужно набрать 5 ~.

4 голосов
/ 24 марта 2009

То, что вы видите, - не вся правда. Это вероятно <ESC>5~ или что-то в этом роде. Попробуйте Ctrl-V Ctrl-Delete. Ctrl-V означает «не интерпретировать следующую вещь».

Так что связывание <ESC>5~ это должно быть довольно безопасно.

3 голосов
/ 12 июня 2009

Alt + D удаляет одно слово справа от курсора Ctrl + W удаляет одно слово слева от курсора (я полагаю, что оба основаны на Emacs)

2 голосов
/ 24 марта 2009

Если вы наберете ^ Q ^ V (это Control-Q, а затем Control-V, отпустить клавишу Control между ними, все в порядке), а затем нажать Control-Delete, вы получите результат, который вы упомянули? Я только что попробовал, и, по крайней мере, используя Putty, я не получил ответа вообще. Возможно, на реальной консоли Linux иное поведение отличается.

Для других клавиш readline печатает более длинную последовательность, часто включающую специальный символ «введение последовательности команд», который трудно набрать по ошибке. Попробуйте и посмотрите, получите ли вы более длинную последовательность с помощью команды ^ Q ^ V (которая, кстати, называется quote-insert).

Например, если я нажимаю ^ Q ^ V и затем удаляю (без удержания элемента управления), readline печатает ^[[3~. Это говорит мне, что я могу связать вещи с клавишей Delete, сказав \e[[3~. Кажется весьма вероятным, что символ CSI присутствует для вас, но вы его не видите, поскольку не просите readline правильно процитировать ввод.

0 голосов
/ 24 марта 2009

Ctrl-W удаляет слова.

Ctrl-u удаляет строки.

Они основаны на Emacs (M-w и M-u).

...