vim - 如何判断在 vimscript 中搜索是否成功?

标签 vim

我正在尝试学习 vimscript。我在“艰难地学习 vimscript”中读了很多,但没有找到我问题的答案:

如何判断在 vimscript 中搜索是否成功?我有两种情况:

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


:if /searchtarget succeeds
    do bar
:endif

最佳答案

根据上下文,有多种方法。

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



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

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

:if /searchtarget succeeds do bar :endif



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

关于vim - 如何判断在 vimscript 中搜索是否成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660221/

相关文章:

bash - bash vi 模式下 tmux 清除历史记录

vim - 将映射中的寄存器名称传递给 ex 命令

linux - 如何在 gnome 终端中使用 Vim 启用括号粘贴模式?

Vim 在文件末尾显示换行符

vim - 我可以在 Vim 中使用多行状态行吗?

vim - Ctags - 仅显示相关或上下文标签

vim - 如何在 vim 中基于大括号定义缩进?

vim - 如何在插入模式下滚动?

vim : iabbrev for a single letter

vim - 在Vim中将一个键映射到多个命令