背景
我在很多Windows系统管理需求中使用JScript(微软的ECMAScript实现),这意味着我经常使用许多ActiveX(自动化COM)对象。这些对象的方法通常需要数字或布尔参数,例如:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();
在第二行中,您可以看到我所谈论的第二个参数。一个布尔值“true”并不能真正描述方法行为的变化。这对我来说不是问题,但我那些害怕自动化的同事们很容易被吓到。他们不知道一个参数的作用会让他们受到惊吓。不幸的是,长长的常量列表(当然,当前的JScript版本不支持真正的常量)也会让他们感到惊慌。因此,我开始使用内联块注释记录一些基本的函数调用。以上示例中的第二行将被写成:
var a = fso.CreateTextFile("c:\\testfile.txt", /*overwrite*/ true, /*unicode*/ false);
这给我带来了一个小的语法高亮的困境。我喜欢我的注释被鲜明地突出显示,包括块注释和行注释。然而,这些微小的内联块注释对我个人来说意义不大。我想以一种更柔和的方式突出显示这些特定的注释(例如白色的浅灰色)。这就带来了我的困境。
困境
当开始和结束标记在同一行时,我想覆盖块注释的默认语法高亮。理想情况下,这只需要在我的vimrc文件中完成,而不是在javascript.vim语法的个人副本中完成。我的初始尝试很糟糕:
hi inlineComment guifg=#bbbbbb
match inlineComment "\/\*.*\*\/"
直接看到这个正则表达式模式的第一个问题就是它是一个贪婪搜索。它将匹配从行首的“/*”到行尾的最后一个“*/”,这意味着两个内联块注释之间的所有内容也将获得此突出显示样式。我可以解决这个问题,但我真的不知道如何处理我的第二个问题。
在ECMAScript中,无法在字符串文字中定义注释。因此,这种语法突出显示也会覆盖字符串突出显示。我在系统管理脚本中从未遇到过这个问题,但是当我检查为浏览器设计的许多JavaScript库(例如less.js)的源代码时,它经常会让我感到困扰。
令人惊叹的StackOverflow社区会推荐什么正则表达式模式、语法定义或其他解决方案来恢复我的vimrc zen呢?