Regex 在Rust语法中高亮显示匹配的尖括号
在尝试修复Rust的vim插件时,我认为可能值得就此获得一些建议Regex 在Rust语法中高亮显示匹配的尖括号,regex,vim,rust,vim-syntax-highlighting,Regex,Vim,Rust,Vim Syntax Highlighting,在尝试修复Rust的vim插件时,我认为可能值得就此获得一些建议 锈有泛型表示,使用角括号( >)类似于C++或java。但是,内部可能会出现箭头(->)。作为一个例子,考虑表达式 Box<Fn(A) -> B> 框B> 当光标位于开始括号上时,vim将突出显示箭头的,而不是结束括号 现在我认为这是因为语法区域匹配没有特殊情况下箭头的可能存在。我试图通过将其定义中的end=/>/更改为end=/-\@/来解决这个问题。但显然,这对括号高亮显示没有影响。现在我开始认为语法区域
锈有泛型表示,使用角括号(
)。作为一个例子,考虑表达式->
Box<Fn(A) -> B>
框B>
当光标位于开始括号上时,vim将突出显示箭头的
,而不是结束括号
现在我认为这是因为语法区域匹配没有特殊情况下箭头的可能存在。我试图通过将其定义中的end=/>/
更改为end=/-\@/
来解决这个问题。但显然,这对括号高亮显示没有影响。现在我开始认为语法区域与此无关
总之,我的问题是:如何更改括号匹配高亮显示的方式?这实际上是由MatchParen插件(随所有vim安装一起提供)处理的 MatchParen插件使用一个固定的语法属性列表来在搜索匹配括号时忽略(从
$VIMRUNTIME/plugin/MatchParen.vim
的第96行开始)
”当不在字符串或注释中时,忽略其中的匹配项。
我们为特殊物品(如lispEscapeSpecial)匹配“escape”。
让我们跳过'synIDattr(synID(line(“.”),col(“.”,0),“name”)'。
\ '=~? “字符串\ \字符\ \单引号\ \转义\ \注释”
执行'if's|u skip'|让s|u skip=0 | endif'
s\u skip
随后被传递到searchpairpos
。似乎没有从插件外部修改s\u skip
因此,如果将rustArrow
的所有实例更改为rustArrow字符
,则括号高亮显示将是正确的。(在syntax/rust.vim
中有三个实例需要更改,其中两个实例需要更改,另一个实例需要更改ftplugin/rust.vim
)该检查只检查语法属性中是否出现字符串、字符、单引号、转义符或注释(不区分大小写)。如果它在搜索匹配的括号时跳过它
我建议在vim dev上询问matchparen是否可以修补,以便将自定义语法属性添加到跳过列表中。感谢您的回答,也感谢Chris创建PR。