在vim编辑Haskell代码时,百分号无法正常工作?

6
当我在vim中将光标放在括号上时:
f = (\x y -> x+y)
    ^

在输入%时,光标会跳转到匹配的括号处:

f = (\x y -> x+y)
                ^

输入 %d 将会删除括号及其中的所有内容

f = 
   ^

但当我有嵌套的括号时:

g = (\(x,y) -> x+y)
    ^

打印 % 会跳转到内部封闭括号而非对应括号:
g = (\(x,y) -> x+y)
          ^

而且%d具有相同的不匹配行为:

g = (\(x,y) -> x+y)
    ^

变成

g =  -> x+y) 
    ^

为什么?我如何让它正确匹配?
奇怪的是,括号的视觉高亮确实起作用: a b c d e f 那么,为什么百分号匹配不起作用呢?是不是有两个大脑?

3
其实我一直被这个事情烦扰着,但从来没有想过在这里问。谢谢! - Daniel Wagner
1个回答

12

简短回答,来自:help %

:set cpoptions+=M

这将防止vim忽略\(组合并将其视为(

(长答案可能涉及使用类似于matchit的插件,我不知道,该插件向vim解释\表示lambda而不是反斜杠。)


@Dog 在你的 .vimrc 文件中,考虑添加 autocmd FileType haskell set cpoptions+=M - Thomas M. DuBuisson
这似乎是有效的,但现在正则表达式字符串的处理不起作用。例如,在此代码中,regex = "((\(blah)...)",将光标放在第二个 ( 上。它会跳到最后一个 ) 而不是第一个。而且,奇怪的是,视觉高亮行为似乎完全不受我是否执行 :set cpoptions+=M 的影响。 - Dog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接