Как удалить слово в обратном порядке в командной строке (bash и zsh)?

Как удалить слово в обратном порядке в командной строке (bash и zsh)?

Как удалить слово назад в командной строке? Я действительно привык к тому, что некоторые редакторы удаляют последнее «слово» с помощью Ctrl+ Backspace, и мне бы хотелось иметь такую ​​же функциональность в командной строке.

В данный момент я использую Bash, и хотя я мог бы перейти на одно слово назад, а затем удалить одно слово вперед, я бы предпочел использовать для этого быструю клавишу или событие типа Ctrl+ Backspace.

Как этого можно добиться?

решение1

Ctrl+ W— это стандартное «уничтожающее слово» (также известное как werase). Ctrl+ Uуничтожает всю строку ( kill).

Вы можете изменить их с помощью stty.

-bash-4.2$ stty -a
speed 38400 baud; 24 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
        -extproc -xcase
iflags: -istrip icrnl -inlcr -igncr -iuclc ixon -ixoff ixany imaxbel
        -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -ocrnl -onocr -onlret -olcuc oxtabs -onoeot
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
        eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = <undef>;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;
-bash-4.2$ stty werase ^p
-bash-4.2$ stty kill ^a
-bash-4.2$

Обратите внимание, что не обязательно выставлять на линию фактический контрольный символ, sttyпонимается паттинг ^, а затем символ, который вы бы ударили с контролем.

После этого, если я нажму Ctrl+, Pэто сотрет слово из строки. А если я нажму Ctrl+ A, это сотрет всю строку.

решение2

Alt+ Backspaceу меня работает в bash и zsh.

решение3

Вы также можете сделать это с помощью CtrlW.

Другой вариант — задать свой собственный ярлык, но это будет зависеть от используемого вами эмулятора терминала. Для xtermи rxvt, возможно, других, добавьте эту строку в свой ~/.inputrc(создайте файл, если он не существует):

## rxvt, xterm
"\b":backward-kill-word

gnome-terminalи ему подобные, похоже, имеют AltBackspaceпо умолчанию, новидимотребуется исправление readline()для получения CtrlBackspace.

Также см:

решение4

Удивительно, escно это deleteработает и на macOS.

Также, если вы используетеiTerm2, вы можете обновить настройки по умолчаниюпрофиль:

Keys > Key Mapping > Presets > Natural Text Editing

Связанный контент