如何在shell中删除单词的剩余部分?

我想知道在shell中是否有一个键绑定可以删除一个单词的剩余部分。
这里的“剩余部分”是指光标所在行的右侧
示例(_|_表示光标):
> mv _|_john.csv ~/.hidden
... CTRL-something ...
> mv ~/.hidden

一种“轻量级”版本,用于 Ctrl+K(删除整个直到换行符的尾部字符)。
3个回答

按下 Alt+d 可以删除单词的剩余部分。但是由于一个 . 结束了这个单词,你需要按两次才能删除 john.csv

Alt-D - Campa

bash 使用 readline(3) 进行行编辑,只将字母数字字符定义为单词的组成部分。

现在,如果你来自于 emacs 的世界,即使用 Esc+dAlt+d 来终止下一个单词。

现在,由于 john.csv 根据定义由两个单词组成,所以你需要按键两次。


感谢两位的回复,选择这个作为官方答案是因为它相对更完整一些。对我来说,使用ALT-D绝对是最方便的。 - Campa

如果您将编辑模式设置为vi(使用set -o vi),则可以使用删除命令。首先,键入Esc以进入命令模式。然后,dw将删除一个短单词——连续的字母数字字符序列或连续的非字母数字(非空白)字符序列,以先出现者为准。在您的示例中,如果键入dw,它将删除john并留下mv _|_.csv ~/.hidden。第二个dw将删除.,第三个将删除csv (即csv和其后的空格)。
如果要删除的“单词”(文件名)足够短,以至于你可以轻松地计算出它包含的短单词数量,那么你可以通过输入3dw来简化操作。但更好的解决方案可能是输入dW(大写的“W”),以删除一个长单词——一个连续的非空字符序列(不考虑是否为字母数字字符)其后的连续空格序列。

谢谢G-Man,但是我指的是如何直接在实时shell中完成这个操作,而不是文件编辑。!! - Campa
1这不是文件编辑;它在实时shell中是有效的。试一下:输入set -o vi并按Enter键。然后输入ls fubar foo bar(不要按Enter键),按Esc键,再输入3bdw。你的实时命令行现在包含ls foo bar,你可以按Enter键来执行它。 - G-Man Says 'Reinstate Monica'