2017-07-29 157 views
1

我有一个如下所示的错误检查单行vim命令。这不是直接的问题的一部分,但可以作为一个例子,可以随意忽略它:vim:防止:exe出错后退出

:'<,'>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
  • ​​- 复制这一行,回去x,并粘贴在上面。

这基本上是一个错误检查命令来查看每一个术语由foo{包裹时,它总是通过包裹FOO。但是,exe在第一种情况下退出,其中/(正向搜索)未找到任何内容。我不希望这种情况发生。

如何使exe:g继续执行,即使exe命令中存在错误?我试过:silent,但那并不能保存。

我宁愿把它作为一行,但函数是第二个选项,我很好。

+0

你似乎甚至不需要':执行'在第一个地方。 – romainl

+0

谢谢@romainl,你知道我如何在没有':exe'的情况下做到这一点吗?我迷路了...... – Miles

+1

只是'正常! ...' – romainl

回答

3

:silent单是不够的。您需要使用:silent!。从:help :silent(重点煤矿):

当加入时,错误消息也将是 跳过,并且当检测到错误命令和映射将不会中止 [!]。

+0

谢谢,明白了! – Miles