我有一个错误检查单线程vim命令,如下所示。它不是问题的直接部分,而是作为一个例子,所以请随意忽略它:
:'<,'>g/foo{.*}/exe "norm! mxf{lvt}y/\\(foo{\\)\\@!\<C-R>\"\<enter>yy'xP"
以下是解释:
:'<,'>g/foo{.*}/
- 使用foo{...}
exe "norm!
- 开始在每一行执行正常模式命令mx
- 记录当前行f{lvt}y
- 复制foo{...}
/\\(foo{\\)\\@!\<C-R>\"\<enter>
- 将搜索转发到foo{...}
foo
大括号内的字符串不的实例
yy'xP"
- 复制该行,返回x
,然后将其粘贴到上方。这基本上是一个错误检查命令,可以看到每当一个术语被foo{
包裹时,它被始终包裹在foo中。但是,在exe
(转发搜索)找不到任何内容的第一种情况下,/
退出。我不希望这种情况发生。
如果exe
命令中出现错误,如何让:g
和exe
继续?我已经尝试了:silent
,但是不能保存它。
我宁愿把它当成一个单行,但功能是我可以接受的第二种选择。
答案 0 :(得分:3)
:silent
是不够的。您需要使用:silent!
。来自:help :silent
(强调我的):
添加[!]时,也会出现错误消息 跳过,命令和映射不会被中止 检测到错误时。