背景
我使用 JScript(Microsoft 的 ECMAScript 实现)来满足许多 Windows 系统管理需求。这意味着我使用了很多 ActiveX(自动化 COM)对象。这些对象的方法通常需要数字或布尔参数。例如:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();
在第二行,您会看到第二个论点是我正在谈论的论点。“真”的布尔值并不能真正描述方法的行为将如何变化。这对我来说不是问题,但我自动化害羞的同事很容易被吓到。不知道一个论点会吓到他们。不幸的是,一长串常量(当然不是真正的常量,因为当前的 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?