---
我想在整个文件中搜索出现在行开头的字符串。然后我想在该字符串的每个实例之前插入换行符。
在我的.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"