假设我有一个目录,其中有一个文件 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。