vim:防止:错误后退出exe

时间:2017-07-29 14:39:51

标签: vim vi ex

我有一个错误检查单线程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命令中出现错误,如何让:gexe继续?我已经尝试了:silent,但是不能保存它。

我宁愿把它当成一个单行,但功能是我可以接受的第二种选择。

1 个答案:

答案 0 :(得分:3)

仅仅{p> :silent是不够的。您需要使用:silent!。来自:help :silent(强调我的):

  

添加[!]时,也会出现错误消息   跳过,命令和映射不会被中止   检测到错误时