在 bash 中如何删除部分单词,类似于 ctrl-w

在 bash 中如何删除部分单词,类似于 ctrl-w

假设我有一个目录,其中有一个文件 mylongfilename.blahdeblah.txt,现在在命令行上按键盘 mv [tab] [tab] 将导致 mv mylongfilename.blahdeblah.txt mylongfilename.blahdeblah.txt

我现在想做的是在第二个 blahdeblah 的位置输入一些内容如果我按几次 ctrl-b,我将回到 .txt 之前的 . 此时我想输入一些类似 ctrl-w 的内容来删除前面的 . 即我最终会得到 mv mylongfilename.blahdeblah.txt mylongfilename..txt

是否有类似于 ctrl-w 的按键可以做到这一点?(Ctrl-w 将删除到前面的空格 - 这不是我想要的)

答案1

您似乎处于 emacs 模式。要在此处执行所需的操作,请执行以下操作:

meta-backspace

(严格来说,它是 M-Del。见这一页了解更多 Emacs 键绑定。我不认为 Bash 的 emacs 模式支持所有键绑定,但它支持这个。)

telemachus ~ $ mv mylongfilename.blahblah.txt mylongfilename.|.txt

管道显示光标的最终位置。

答案2

Bash 有 emacs 和 vi 模式。在 vi 模式下,只需 dw 即可删除单词,或 cw 即可更改单词。set -o vi 可进入 vi 模式。可能有一个等效的 emacs 模式。

man readline 是 bash 键盘内容的参考,并且 bash 中 readline 的特定版本位于 man bash 中。

答案3

来自 man bash:

COMP_WORDBREAKS
    The set of characters that the Readline library treats as word separators when
    performing  word  completion.   If COMP_WORDBREAKS is unset, it loses its special
    properties, even if it is subsequently reset.

改变此项应该会改变用作单词分隔符的字符,因此如果您在其当前值中添加“。”,则 Ctrl-w 将删除回“。”而不是返回到前面的空格。

答案4

假设您在该目录中需要执行相当多的这样的“mv”操作,为什么不使用“sed”编写一个简短的翻译脚本呢?

你会发现一些技巧这里。但不要让这限制你,但无论如何也要查找更多 sed 和 awk。

相关内容