我试图学习vimscript。我已经读了很多东西,并且很难学习vimscript"但是找不到我的问题的答案:
如何判断vimscript中的搜索是否成功?我有两个案例:
:if there's a ( on the current line
do foo
:endif
:if /searchtarget succeeds
do bar
:endif
答案 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的结果列表元素。