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

说我有一个目录中有一个文件mylongfilename.blahdeblah.txt现在击键mv [选项卡] [选项卡]将导致mv mylongfilename.blahdeblah.txt mylongfilename.blahdeblah.txt在我的命令行

我现在想要做的是在第二个blahdeblah的地方键入的东西,如果我按ctrl-b几次,我会回来的。 之前.txt在这一点上我想input类似ctrl-w删除到前面。 即我最终与mv mylongfilename.blahdeblah.txt mylongfilename..txt

有没有类似于CTRL-W键击会做到这一点? (Ctrl-W将删除到前面的空间 – 不是我想要的)

您似乎是在emacs模式。 要做到你想在那里,这个工程:

meta-backspace 

(严格来说就是M-Del,更多的Emacs键盘参见这个页面 ,我不认为Bash的emacs模式支持它们,但是它支持这个模式)。

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

pipe道显示光标结束。

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

man readline是bash键盘的参考资料,而bash的特定版本是readline在man bash中。

从男人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将会删除回到'。' 而不是回到先前的空间。

你可以尝试交换单词,把部分blahdeblah放在行尾(用Esc-T),然后删除行尾:

  • MV [选项卡] [选项卡]

    mv mylongfilename.blahdeblah.txt mylongfilename.blahdeblah.txt

  • [Esc-T](交换光标前的最后两个单词)

    mv mylongfilename.blahdeblah.txt mylongfilename.txt .blahdeblah

  • [CTRL-W]

    mv mylongfilename.blahdeblah.txt mylongfilename.txt

假设你在这个目录中有很多这样的“mv”操作,为什么不用一个简短的翻译脚本来编写“sed”呢?

你会在这里find一些技巧。 但是,不要让这限制你,但所有的手段也查找更多sed和awk。