突出显示 Rust 语法中匹配的尖括号
Highlight matching angle-brackets in Rust syntax
试图在 Rust 的 vim 插件中修复 a bug,我认为可能值得就此获得一些建议。
Rust 具有使用尖括号 (<...>
) 表示的泛型,类似于 C++ 或 Java。但是,内部可能会出现箭头 (->
)。例如考虑表达式
Box<Fn(A) -> B>
当光标位于左括号上时,vim 突出显示箭头的 >
而不是右括号。
现在我认为这是因为语法区域匹配没有特殊情况下可能存在箭头。我试图通过在其定义中将 end=/>/
更改为 end=/-\@<!>/
来解决这个问题。但显然这对括号突出显示没有影响。现在我开始认为语法区域与此无关。
总而言之,我的问题是:如何更改括号匹配突出显示的方式?
这实际上是由 MatchParen 插件处理的(所有 vim 安装都附带)。
MatchParen 插件使用固定的语法属性列表在搜索匹配括号时忽略(来自 $VIMRUNTIME/plugin/matchparen.vim
中的第 96 行左右)
" 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 个实例要更改两个 syntax/rust.vim
和一个 ftplugin/rust.vim
)检查只是检查字符串、字符、单引号、转义或注释是否出现在语法属性中的任何位置(不区分大小写)。如果在搜索匹配的括号时跳过它。
我建议在 vim-dev 上询问是否可以修补 matchparen,以便可以将自定义语法属性添加到跳过列表中。
试图在 Rust 的 vim 插件中修复 a bug,我认为可能值得就此获得一些建议。
Rust 具有使用尖括号 (<...>
) 表示的泛型,类似于 C++ 或 Java。但是,内部可能会出现箭头 (->
)。例如考虑表达式
Box<Fn(A) -> B>
当光标位于左括号上时,vim 突出显示箭头的 >
而不是右括号。
现在我认为这是因为语法区域匹配没有特殊情况下可能存在箭头。我试图通过在其定义中将 end=/>/
更改为 end=/-\@<!>/
来解决这个问题。但显然这对括号突出显示没有影响。现在我开始认为语法区域与此无关。
总而言之,我的问题是:如何更改括号匹配突出显示的方式?
这实际上是由 MatchParen 插件处理的(所有 vim 安装都附带)。
MatchParen 插件使用固定的语法属性列表在搜索匹配括号时忽略(来自 $VIMRUNTIME/plugin/matchparen.vim
中的第 96 行左右)
" 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 个实例要更改两个 syntax/rust.vim
和一个 ftplugin/rust.vim
)检查只是检查字符串、字符、单引号、转义或注释是否出现在语法属性中的任何位置(不区分大小写)。如果在搜索匹配的括号时跳过它。
我建议在 vim-dev 上询问是否可以修补 matchparen,以便可以将自定义语法属性添加到跳过列表中。