假设这个文字:
{This text "contains two '}'" }
在许多文件类型中,如果我在%
上按{
,它将跳到行尾,忽略第一个}
。
如何使vim的匹配机制忽略特定语法区域中的>
?
我的确切问题发生在jsx文件中,请考虑一下:
<SomeComponent
// >>> > >>
x='>>>> > >> >'
onClick={() => {}}
/>
```
如果我在第一行的第一个字符中按%
,它将跳转到第四行的>
,而不是跳到最后一行的第二个字符。有些插件为我处理jsx的语法,它们为{()=&gt;定义了一个特殊区域。 {}}我想在此区域中禁用匹配查找,就像在注释和字符串中禁用它一样。
我不是要将<
与/>
匹配。我只希望<
匹配右>
而不是js块(=>
)中的那个。
答案 0 :(得分:0)
所以我无法准确回答您的问题,但我可以向您提供一些有关&#39;%&#39;动作。
它会查看匹配对的列表&#39; (:help matchpairs
了解更多信息)这实际上只是一个列表,其中包含已由当前文件和插件(如matchit.vim)可用的任何活动语法文件定义的字符对。
查看帮助文档,这些对仅限于允许单个字符 - &gt;字符映射使您无法实际扩展它以允许<
与/>
匹配。 (:set mps+=<:/>
爆炸:()
一个可能的解决方案(虽然不是很棒),可能是安装matchit.vim插件,然后总是用标签的名称完整关闭你的标签。即<foobar> some stuff </foobar>
。 matchit.vim会在标记<>
中添加内容,并将其添加到%
对列表中。我不完全确定他使用什么魔法来建立一个字符串对,但也许查看他的来源可能会揭示让<
匹配/>
的解决方案。
祝你好运!
答案 1 :(得分:0)
阅读https://github.com/isaacs/.vim/blob/master/macros/matchit.txt#L64以使vim在搜索匹配时忽略特定的文本区域,您应该激活matchit。默认情况下,它会忽略注释和字符串。如果要将更多语法区域添加到忽略列表,则应在此处记录b:match_skip
变量:https://github.com/isaacs/.vim/blob/master/macros/matchit.txt#L218。
在我的情况下,使用vim-javascript
和vim-jsx
我必须将其设置为:s:comment\|string\|jsArrowFunction
(其默认值为's:comment \ | string'。我为{{创建了此拉取请求1}}开箱即用:https://github.com/sassanh/vim-jsx/pull/1