Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在vim脚本中找到匹配的大括号或方括号的位置_Vim_Vim Plugin - Fatal编程技术网

如何在vim脚本中找到匹配的大括号或方括号的位置

如何在vim脚本中找到匹配的大括号或方括号的位置,vim,vim-plugin,Vim,Vim Plugin,我知道使用%我可以跳转到匹配的大括号和方括号,但是如果我只想知道匹配的大括号和方括号的位置怎么办?有什么函数可以得到它吗?像 int test(int a){return a} 我的光标在这行的末尾,在}之后,因此列是25,我想知道它匹配的大括号({)的位置,应该是16。或者你可以玩%然后录制光标()或者行()+列(),或者你可以使用搜索pairpos()),但别忘了指定一条规则来忽略注释上下文中的括号字符 e、 g 您可以玩%,然后录制cursorpos()或line()+col()。也可以

我知道使用
%
我可以跳转到匹配的大括号和方括号,但是如果我只想知道匹配的大括号和方括号的位置怎么办?有什么函数可以得到它吗?像

int test(int a){return a}

我的光标在这行的末尾,在
}
之后,因此列是25,我想知道它匹配的大括号(
{
)的位置,应该是16。

或者你可以玩
%
然后录制
光标()
或者
行()
+
列()
,或者你可以使用
搜索pairpos())
,但别忘了指定一条规则来忽略注释上下文中的括号字符

e、 g


您可以玩
%
,然后录制
cursorpos()
line()
+
col()
。也可以使用
searchpairpos()
,但别忘了指定一条规则来忽略注释上下文中的括号字符

e、 g


您只需按
%%
@romani即可。正如我所说,我知道
%%
可以移动到匹配的对,但我想知道的是行号和列号,按%%不为我做任何事情。1.按
%%
将光标移动到相应的大括号。2.读取状态行中的行/列。3.按
%返回。快速且便宜。如果您确实需要复杂的解决方案,请参阅
:help searchpairpos()
。事实上,我可以这样做,我已经编写了与您所说的相同的代码,我只是想知道是否有更好的选择,可以在不更改光标位置的情况下获得位置。无论如何,感谢您的帮助。如果您不想更改光标位置,则必须使用
searchpairpos()
带有
n
标志。您只需按
%%
@romani即可。正如我所说,我知道
%%
可以移动到匹配的对,但我想知道的是行号和列号,按%%do nothing for me。1.按
%%
将光标移动到相应的大括号。2.读取y中的行/列我们的状态行。3.再次按
%
返回。快速且便宜。如果您确实需要复杂的解决方案,请参阅
:help searchpairpos()
。事实上,我可以这样做,我已经编写了与您所说的相同的代码,我只是想知道是否有更好的选择,可以在不更改光标位置的情况下获得位置。无论如何,感谢您的帮助。如果您不想更改光标位置,则必须使用
searchpairpos()
带有
n
标志。
let s:skip_comments = 'synIDattr(synID(line("."), col("."), 0), "name") =~?'
      \ . '"string\\|comment\\|doxygen"'

function! s:SearchBracket()
  let flag = 'cnzW'
  return searchpairpos('{', '', '}', flag, s:skip_comments)
endfunction