如何在当前命令行命令中使用vim进行替换?

如何在当前命令行命令中使用vim进行替换?

我在命令行上使用 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 来完成此操作。关于文件名中空格的注释不在范围内;假设我意识到这些危险。

相关内容