我正在尝试编写一个函数,该函数将删除与模式匹配的每一行。但是这种模式将根据列表中的单词(由字典制成)而改变。我以为这是一个简单的
for
循环,但是for
循环变量不会在模式内扩展。 ^The key
,^The red
等。它不会将^The green
变量扩展到它所持有的任何值。还是有一种更好的方法可以完全实现我的目标?#1 楼
您需要使用:execute
来“构建”全局命令,如下所示:for key in sort(keys(myDict))
execute '%g/^The ' . key . '/d'
endfor
有关使用
:h :exe
的更多帮助,请参见:execute
。 您可能需要转义键
可能考虑轮换。例如
\(red\|blue\|green\)
您可能希望将
:delete
放入黑洞寄存器中,以防止出现任何意外情况。例如:d_
评论
完善。这个问题不需要在变量内部转义,但是,为了完整起见,该怎么做?只需在该变量上使用split并将其连接回一个新的变量中,并在需要的地方加上转义字符?
–embedded.kyle
15年3月16日在22:05
最简单的方法是将\ V或非常不可思议的方法与escape()函数一起使用。例如let regex ='\ V \ ^ The \('。join(map(keys(myDict),'escape(v:val,'''\''')'),'\ |')。'\)'
– Peter Rincker
15年3月16日在23:11