gpt4 book ai didi

regex - 突出显示 Rust 语法中匹配的尖括号

转载 作者:行者123 更新时间:2023-11-29 08:00:01 25 4
gpt4 key购买 nike

正在尝试修复 a bug在 Rust 的 vim 插件中,我认为可能值得就此获得一些建议。

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个实例要改2个在syntax/rust.vim和1个ftplugin/rust.vim)检查只是检查字符串,字符,单引号,转义, 或注释出现在语法属性的任何位置(不区分大小写)。如果它在搜索匹配的括号时跳过它。

我建议在 vim-dev 上询问是否可以修补 matchparen,以便可以将自定义语法属性添加到跳过列表中。

关于regex - 突出显示 Rust 语法中匹配的尖括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30308846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com