如何在命令行中向后删除单词?我确实习惯于一些编辑者使用Ctrl + Backspace删除最后一个“单词”,我也希望在命令行中使用该功能。可以向后跳一个单词,然后向前删除一个单词,我宁愿将其作为快捷键,也可以将事件作为Ctrl + Backspace。 />

#1 楼

Ctrl + W是标准的“ kill word”(又名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,则会删除整行。

评论


使用stty命令,我尝试通过键入stty werase后跟Ctrl-v Ctrl-Backspace来将“ kill word”分配给Ctrl + BckSpc。这会插入文字Ctrl-Backspace字符作为stty werase的参数。不幸的是,它不需要键入Ctrl-Backspace即可删除单词,而只能使用Backspace键。因此,我想赞同@terdon的要求以学习如何执行此操作。要将werase重置为默认值,请使用stty werase Ctrl-v Ctrl-w。

–提莫西·马丁(Timothy Martin)
13-10-10在7:26

@TimothyMartin我对如何执行ctrl-backspace有点困惑。退格通常以ctrl-h或ctrl-?的形式发送,因此ctrl-backspace将以某种方式成为ctrl-ctrl-backspace。我确实试图弄清楚是否发送了其他消息,但是至少在键入ctrl-backspace时,腻子才发送退格键。

–kurtm
13-10-10在14:13

ctrl + w可以有效删除单词,但它也会复制到剪贴板上,从而删除您存储的所有内容(或将其向下推?)。

–伊利亚·林恩(Elijah Lynn)
2015年12月28日在17:44

esc-删除刚刚起作用的:-)

–雷恩·伍勒(Rene Wooller)
16-11-23在5:53

我是否正确理解,尽管接受了这个答案并且200票都没有人知道如何将向后删除字映射到CTRL + Backspace。 (我在其他任何地方都有该组合设置,因此我真的很想保留它。)

– Kvothe
20年8月6日在8:43

#2 楼

Alt + Backspace在bash和zsh中对我有效。

评论


不适用于iterm :(

– Akarsh Satija
16年6月1日在10:25

例如,删除URL,然后使用Ctrl + W删除整个URL,而Alt + Backspace则删除一个单词,并且在发现特殊字符时停止删除。

– Metafaniel
16年8月24日在15:20

和往常一样,您可以按ctrl键拉/撤消/粘贴。

– Pablo A
18-09-20在0:04

这为iterm解决了这个问题:github.com/fish-shell/fish-shell/issues/2124

– Pascalius
19年1月3日在10:13

Ctrl + W关闭cmder中的标签。

– Smart Manoj
20 Dec 15'在10:41

#3 楼

您也可以使用CtrlW来执行此操作。

另一个选项是设置您自己的快捷方式,但这取决于您使用的终端仿真器。对于xtermrxvt以及其他可能的代码,请将此行添加到您的~/.inputrc(如果文件不存在,请创建该文件):默认情况下,但显然要求您修补gnome-terminal才能获得CtrlBackspace。

另请参见:


https://superuser.com/questions/95626/ control-backspace-unix-kill-rubout-for-readline

https://help.ubuntu.com/community/HowToReadline readline()



#4 楼

在Ubuntu 18.04.4中,先按Ctrl + V,再按Ctrl + Backspace会显示Ctrl + Backspace组合写为^H
您可以使用stty -a显示所有当前的终端键组合。在这种情况下,我们想将werase更改为^H,可以使用
stty werase ^H

要重新映射的任何其他键,您将再次看到如何使用Ctrl + V组合新组合。
通过查看werase并查找当前绑定到某个动作的键组合,您可以找到命令名称(例如stty -a)。

评论


现在是2020年,我们可以在Linux上正确使用退格键:)。好消息是,我认为这不是特定于Ubuntu的(有关某些信息,请参阅cs.colostate.edu/~mcrob/toolbox/unix/keyboard.html)。我在arch和^ H的每种情况下都尝试了几种不同的终端模拟器。

– Pippip19
20年8月30日在17:40

#5 楼

在Mac上,您可以使用:

Fn + Delete

评论


这样会删除光标前面的1个字符,而不是后面的1个字

–丹妮德
16-10-14在18:45

不知道这是否仍然有用,但是在Mac上为 +

–哈桑
17年1月15日在2:15