如何在命令行(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

另一种选择是设置您自己的快捷方式,但这取决于您使用的终端模拟器。对于xtermrxvt也许还有其他人,请将此行添加到您的文件中~/.inputrc(如果文件不存在,则创建该文件):

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

gnome-terminal及其同类似乎AltBackspace默认具有但是显然需要你打补丁readline()才能获得CtrlBackspace

另请参阅:

答案4

令人惊讶的是,escthendelete也适用于 macOS。

另外,如果使用iTerm2,您可以更新默认值轮廓:

Keys > Key Mapping > Presets > Natural Text Editing

相关内容