我正在处理很多文件,这些文件的qq{...}
字符串在绊倒方面做得很好,vim
使其整个文件的其余部分变为绿色。
我已经尝试过这个 perl 语法定义但无济于事,而且我还注意到它的日期比perl.vim
我的 vim 附带的语法文件还要早。
我使用的是 vim 7.3.918,它是从 mercurial 源代码新编译的,它的 perl 语法文件如下所示:
1 " Vim syntax file
2 " Language: Perl 5
3 " Maintainer: Andy Lester <andy@petdance.com>
4 " URL: http://github.com/petdance/vim-perl/tree/master
5 " Last Change: 2010-08-10
6 " Contributors: Andy Lester <andy@petdance.com>
7 " Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
8 " Lukas Mai <l.mai.web.de>
9 " Nick Hibma <nick@van-laarhoven.org>
10 " Sonia Heimann <niania@netsurf.org>
11 " and many others.
12 "
13 " Please download most recent version first before mailing
14 " any comments.
15 "
16 " The following parameters are available for tuning the
17 " perl syntax highlighting, with defaults given:
18 " 19 " unlet perl_include_pod
20 " unlet perl_no_scope_in_variables
21 " unlet perl_no_extended_vars
22 " unlet perl_string_as_statement
23 " unlet perl_no_sync_on_sub
24 " unlet perl_no_sync_on_global_var
25 " let perl_sync_dist = 100
26 " unlet perl_fold
27 " unlet perl_fold_blocks
28 " let perl_nofold_packages = 1
29 " let perl_nofold_subs = 1
...
它死在qq{}
代码上。它们通常可以通过使用其他分隔符来解决,但我在这里谈论的是很多代码。
我尝试查看perl.vim
处理 q/qq/qr/qx 引用的部分,但它非常复杂。
这是一些可以很好地解决问题的代码示例:
我无法再粘贴任何代码,因此您必须相信我,基本上文件其余部分中的所有内容都被视为字符串。
看起来问题当然是}
结尾的$layout->{ID}
被解释为qq{}
.
但事实并非如此,因为此代码运行。它不会崩溃和燃烧。因此 vim 是错误的,在匹配}
. 但是,正如这一行所示,括号可以在行尾......
在这一点上,我什至不确定是否有可能在qq{}
没有语法定义无法执行的某种解析的情况下知道结束的位置。