2

我正在处理很多文件,这些文件的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{}没有语法定义无法执行的某种解析的情况下知道结束的位置。

4

2 回答 2

2

这是一个 vim 插件,它显着提高了我的 vim 7.3 突出 perl 的能力。

希望这一切都能进入核心 vim 7.4

于 2013-05-22T20:26:17.773 回答
1

#'在问题行的末尾添加一个?抱歉,我没有更好的建议。

在这个领域,perl 提供了比语法荧光笔实际支持的更大的灵活性。

于 2013-05-06T19:56:20.447 回答