这个vimscript做了什么?

时间:2010-01-15 09:00:26

标签: vim haskell

完整来源:http://www.vim.org/scripts/download_script.php?src_id=10391

该行是:

    silent %s/[^λ←→≲≳≡≠⇒»∙∀\\\-!#$%&*+/<=>?@\^|~.]\@<=\\\([^λ←→≲≳≡≠⇒»∙∀\\\-!#$%&*+/<=>\?@\^|~.]\)/λ\1/eg

有人请为我解读这个。较大的脚本旨在将Haskell中的一些运算符unicode-ify更熟悉的数学等价物。

2 个答案:

答案 0 :(得分:6)

作为该行的作者,我可以翻译。复杂的正则表达式通常是“只写”,这依赖于vim正则表达式扩展。

这样做的目的是确保它不会在\之类的运算符中间用漂亮的λ替换\\

它会检查以确保缓冲区中我们前面的字符不是有效的运算符符号(所有内容的含义都是\@<=)。 \@<=是一个'零宽度匹配后面',只有当它左边的东西出现时才会成功,但不会在结果匹配中包含它。

然后\([^...]\)部分检查以确保跟随我们的东西也是非符号,在这种情况下,我们匹配它,然后将其包含在输出中归功于{{ 1}}在结果中。

注意,这并不完美。不幸的是,它仍然会替换字符串中的反斜杠,但效果相当不错。

答案 1 :(得分:3)