试图修复Rust的vim插件中的错误,我认为可能值得对此寻求一些建议。
Rust具有<...>
类似于C ++或Java的使用尖括号()表示的泛型。但是,->
内部可能会出现箭头()。例如,考虑表达式
Box<Fn(A) -> B>
当光标在左括号上时,vim突出显示箭头,>
而不是右括号。
现在,我认为发生这种情况是因为语法区域匹配没有将箭头的可能存在特殊化。我试图通过改变来解决这个问题end=/>/
,以end=/-\@<!>/
在其定义。但是显然,这对括号突出显示没有影响。现在,我开始认为语法区域与此无关。
总而言之,我的问题是:如何更改括号突出显示的方式?
这实际上是由MatchParen插件处理的(所有vim安装都随附)。
MatchParen插件使用固定的语法属性列表在搜索匹配的括号时忽略(从中的第96行开始$VIMRUNTIME/plugin/matchparen.vim
)
" When not in a string or comment ignore matches inside them.
" We match "escape" for special items, such as lispEscapeSpecial.
let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
\ '=~? "string\\|character\\|singlequote\\|escape\\|comment"'
execute 'if' s_skip '| let s_skip = 0 | endif'
s_skip
然后传递给searchpairpos
以后。它似乎没有s_skip
从插件外部进行任何修改。
所以,如果你改变的所有实例rustArrow
到rustArrowCharacter
支架高亮显示将是正确的。(有3个实例,其中2个变为syntax/rust.vim
1个ftplugin/rust.vim
)。检查只是检查字符串,字符,单引号,转义符或注释是否出现在语法属性的任何位置(不区分大小写)。如果确实没有,则在搜索匹配的括号时跳过它。
我建议在vim-dev上询问是否可以修补matchparen,以便可以将自定义语法属性添加到跳过列表中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句