制作像符号一样的括号不考虑vim中特定语法区域的匹配

时间:2017-04-24 20:16:42

标签: vim vim-syntax-highlighting

假设这个文字: {This text "contains two '}'" } 在许多文件类型中,如果我在%上按{,它将跳到行尾,忽略第一个}。 如何使vim的匹配机制忽略特定语法区域中的>

我的确切问题发生在jsx文件中,请考虑一下:

<SomeComponent
    //  >>> >  >>
    x='>>>> > >> >'
    onClick={() => {}}
/>

``` 如果我在第一行的第一个字符中按%,它将跳转到第四行的>,而不是跳到最后一行的第二个字符。有些插件为我处理jsx的语法,它们为{()=&gt;定义了一个特殊区域。 {}}我想在此区域中禁用匹配查找,就像在注释和字符串中禁用它一样。

声明

我不是要将</>匹配。我只希望<匹配右>而不是js块(=>)中的那个。

2 个答案:

答案 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-javascriptvim-jsx我必须将其设置为:s:comment\|string\|jsArrowFunction(其默认值为's:comment \ | string'。我为{{创建了此拉取请求1}}开箱即用:https://github.com/sassanh/vim-jsx/pull/1