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

Leo*_*ard 6 vim

我正在努力学习vimscript.我在"学习vimscript艰难的方式"中读了很多,但没有找到我的问题的答案:

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

:如果有一个(在当前行上做foo:endif

:if/searchtarget成功做bar:endif

Ing*_*kat 6

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

:如果有一个(在当前行上做foo:endif

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

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

:if/searchtarget成功做bar:endif

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