我在命令行上使用 vim。我想使用替换命令来搜索和替换我当前在 CLI 中使用的命令行中的字符。
这只是一个例子,假设我想重命名一个文件并开始编写如下命令:
mv here_is_a_way_too_long_filename.txt here_is_a_way_too_long_filename.txt
文件名很长,因此为了方便起见,我使用制表符补全来生成第二个文件名。现在我想用其他东西替换下划线,例如\
.
我在 CLI 中使用 vim,因此我按ESC进入 (vim) 正常模式,转到第二个文件名的开头,然后按:
进入命令s/_/\ /
。仅供参考,进入:
此处后,我看到了以下内容:
mv here_is_a_way_too_long_filename.txt here_is_a_way_too_long_filename.txt
execute: s/_/xxx/
→但我无法输入空格或者按回车键执行此 vim 替换命令。事实上,我只能execute:
按 退出这条额外的行^C
。
我还尝试了替换命令的多种变体,但无济于事:
s/_/xxx/
gs/_/xxx/
%s/_/\\ / ← NB: I can’t actually enter the space here.
s/_/\\s/
s/_/[:space:]/
... and so on
我不想诉诸命令历史记录。这个帖子描述了对命令历史记录中的前一个命令执行类似的操作。
我想要得到的结果(在上面的例子中)是这样的:
mv here_is_a_way_too_long_filename.txt here\ is\ a\ way\ too\ long\ filename.txt
然后我按下回车键mv
在 shell 中执行该命令(例如zsh
)。
如果可能的话,我想在 CLI 中使用 vim 来完成此操作。关于文件名中空格的注释不在范围内;假设我意识到这些危险。