这个vimscript做了什么?

me2*_*me2 2 vim haskell

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

这条线是:

    silent %s/[^????????»??\\\-!#$%&*+/<=>?@\^|~.]\@<=\\\([^????????»??\\\-!#$%&*+/<=>\?@\^|~.]\)/?\1/eg
Run Code Online (Sandbox Code Playgroud)

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

Edw*_*ETT 6

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

这样做的目的是确保它不会像操作员那样\用漂亮的印刷品?进行替换\\.

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

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

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