如何在命令行(bash 和 zsh)中向后删除一个单词?

luc*_*iet 192 bash keyboard-shortcuts

如何在命令行中向后删除单词?我真的习惯于某些编辑器使用Ctrl+删除最后一个“单词” Backspace,我也希望在命令行中使用该功能。

我现在正在使用 Bash,虽然我可以向后跳一个词然后向前删除一个词,但我宁愿将其作为快捷键,或将事件作为Ctrl+ Backspace

怎样才能做到这一点?

kur*_*rtm 260

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$
Run Code Online (Sandbox Code Playgroud)

请注意,人们不必将实际的控制角色放在线上,stty理解推杆^然后你会用控制击中的角色。

这样做之后,如果我点击Ctrl+P它将从该行中删除一个单词。如果我点击Ctrl+ A,它将擦除整行。

  • ctrl + w 有效地删除了单词,但它也会复制到剪贴板,擦除您存储的任何内容(或按下它?)。 (3认同)
  • 使用“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`。 (2认同)
  • @TimothyMartin 我对如何执行“ctrl-backspace”有点困惑。退格键通常以“ctrl-h”或“ctrl-?”形式发送,因此“ctrl-backspace”在某种程度上会是“ctrl-ctrl-backspace”。我确实试图弄清楚是否发送了不同的内容,但至少当您输入“ctrl-backspace”时,putty 只是发送退格键。 (2认同)
  • 有人知道如何使“单词”停在非单词字符而不仅仅是空格处吗?IE 为:“curl a/asdf/xcvb”,按 ^w 将得到“curl”,但我想要的是“curl a/asdf/” (2认同)
  • esc - 删除刚刚工作:-) (2认同)

Lui*_*uis 54

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

  • 例如,删除一个 URL 并使用 `Ctrl+W` 会删除整个 URL,而 `Alt+Backspace` 会删除一个单词并在找到特殊字符时停止删除。 (9认同)
  • 不适用于 iterm :( (4认同)
  • 并且[一如既往](https://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/)你可以用`ctrl-y`来复制/撤消/粘贴。 (2认同)
  • 这解决了 iterm:https://github.com/fish-shell/fish-shell/issues/2124 (2认同)

ter*_*don 34

您也可以使用CtrlW.

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

## rxvt, xterm
"\b":backward-kill-word
Run Code Online (Sandbox Code Playgroud)

gnome-terminal它的同类似乎在AltBackspace默认情况下具有但显然需要您打补丁readline()才能获得CtrlBackspace.

另见:


Kvo*_*the 9

在 Ubuntu 18.04.4 中按Ctrl+V然后Ctrl+Backspace显示Ctrl+Backspace组合写为^H.

您可以使用 显示所有当前的终端键组合stty -a。在这种情况下,我们要更改werase^H可以使用

stty werase ^H
Run Code Online (Sandbox Code Playgroud)

对于您想要重新映射的任何其他键,您将再次看到如何使用Ctrl+V后跟组合来编写新组合。

您可以werase通过查看stty -a和查找操作当前绑定到的组合键来找到命令名称(例如)。