如何搜索字符串,然后在文件中的所有行的开头插入换行符?

如何搜索字符串,然后在文件中的所有行的开头插入换行符?

---我想在整个文件中搜索出现在行开头的字符串。然后我想在该字符串的每个实例之前插入换行符。

在我的.vimrc文件中,我添加了以下命令:

let @p=":1,$s/^---/^M---/"

当我执行它时,它不会插入换行符。相反,它会忽略从头开始的所有内容^M,因此它会将 替换---为空字符串,并从开头包含它们的每行中删除 3 个破折号。

我的 @p 命令有什么问题?我好像不认识这个^M角色。搜索和替换命令中不允许这样做吗?顺便说一句,我可以手动执行此操作,只需在:文件底部的提示符下键入完全相同的命令即可。

我也尝试过:

let @p=":1,$s/^---/^M^[---/"

(在换行符后添加了转义符)-这给了我完全相同的结果。看起来它忽略了转义以及替换部分的其余部分。

有人可以告诉我正确的方法吗?我确实想将这些命令保留在 vimrc 文件中,因为我编辑了很多具有相同命令集的文件(并且涉及多个宏,除了这个之外所有这些都工作正常),所以我不想重新创建每次打开新文件时都会使用相同的宏。

谢谢你!

答案1

请记住,脚本中的字符就像是键入的一样。所以^M一回车就会被执行。所以你需要写

let @p=":1,$s/^---/^V^M---/^M"

因为这是您在手动录制宏时要输入的内容。当然,要编写此内容,您需要键入ctrlV、then ctrlV、thenctrlV和finally ctrlM

另请注意,您需要在末尾添加一个final^M来真正执行该命令,而不仅仅是将其放入缓冲区中。

顺便说一句,您可以简化1,$%使用&而不是重复该模式,这样您就可以编写

let @p=":%s/^---/^V^M&/^M"

相关内容