如何判断vimscript中的搜索是否成功?

时间:2014-12-26 17:48:54

标签: vim

我试图学习vimscript。我已经读了很多东西,并且很难学习vimscript"但是找不到我的问题的答案:

如何判断vimscript中的搜索是否成功?我有两个案例:

:if there's a ( on the current line
        do foo
:endif


:if /searchtarget succeeds
    do bar
:endif

2 个答案:

答案 0 :(得分:6)

根据具体情况,有各种方法。

  

:如果有的话(在当前行上做foo:endif

根据@ Kent的答案,您可以使用search()。它支持{stopline}参数,以避免它超出当前行(您可以通过line('.')传递)。但它只能在一个方向上搜索(向前或向后),因此您必须定位光标。

所以听起来if getline('.') =~ '('是一个更好的测试。它对当前行与(进行正则表达式比较。您也可以使用match()代替(通过:help查找完整的API文档和示例BTW)或非正则表达式stridx()(可能更快,但也是不太清楚阅读)。

  

:如果/ searchtarget成功,请执行bar:endif

同样,这听起来像search()的使用,它将光标重新定位在像/search这样的匹配上。但您也可以使用后者(使用:normal),并通过比较命令之前和之后的光标位置(通过getpos('.')获得)来检查跳转。

答案 1 :(得分:2)

Vim具有search()功能。 :h search(阅读功能说明。

如果找到匹配项,则func将返回行号,否则返回0。您可以根据函数的返回值来执行逻辑。

要检查当前行中是否有某种模式,您也可以使用search()函数,也可以split()当前行的文本,看看是否有超过2的结果列表元素。