vim php_javascriptInStrings选项是什么?

6
我注意到我的Ubuntu机器上的syntax/php.vim文件有一个php_htmlInStrings选项。我可以打开此选项以在我的php文件中的字符串内显示HTML语法高亮,这很好。我还想在php文件中的字符串内进行javascript语法高亮。有人知道是否可以实现,如果可以,如何实现?
编辑-添加额外可能性
我还应该提到,如果需要,在输出结果之前,我将通过PHP函数解析所有JavaScript字符串也是可行的解决方案。这可能会避免Conner所提出的问题,即vim难以确定字符串是否包含JavaScript。例如:
$js = "some regular text which is not javascript##now vim has
detected that this part is javscript##back to regular text";
parse($js);
function parse($str)
{
    return str_replace('##', '', $str);
}

我很乐意做这件事,因为我可能会将html/css/js变量缩小器整合到我的项目中,这将对字符串进行替换。当然,如果有一个针对vim的特定等效字符##,它不会显示在源代码中,也不需要过滤,那么这将更可取...根据conner在下面提供的解决方案,可以通过以下方式实现所需的效果:
$js = "<script>some javascript</script>";

(使用 :let php_htmlInStrings=1 在 vim 中)。如果有人能展示给我所需的vim脚本,使得以下字符串中的javascript语法高亮显示,则我会将答案授予他们:

$js = /*<script>*/"some javascript"/*</script>*/;
2个回答

2
我认为这个问题的普遍性在于vim需要一种区分javascript和HTML高亮的方式。在HTML文件中,vim基于其内部的<script></script>标签来应用javascript高亮。如果您在字符串中放置<script></script>标签,则会发现这是正确的。但是,如果您将它们移除,则vim无法知道您字符串中的内容是HTML还是javascript。您可以通过添加某些指示符来表示它是javascript来解决此问题,希望这不会影响结果代码,但这很棘手。您可以在$VIMRUNTIME/syntax/html.vim的第167行中看到HTML文件设置了<script></script>标签规范的位置。它看起来像这样:
syn region  javaScript start=+<script[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc

嗯,我也考虑过那个。不管怎样,我都会通过 PHP 中的一个最小化函数解析所有我的 JavaScript 字符串,所以我可以在每个字符串的开头和结尾放置一个字符来表示 JS 编码。如果你有任何想法,我该如何实现呢?(我将把这个事实添加到问题中) - mulllhausen
嗯,我不认为这是一个很好的解决方案,但如果你在JS周围使用括号,那么你可以使用上面的相同代码,但修改开始和结束字段为start=/{/ keepend end=/}/me=s-1 - Conner
我可以使用类似$js = (("some javascript"));的东西 - 这在php中编译得很好。唯一的问题是它会被嵌套函数调用所捕获。例如:print_r(("blah" == $a) ? 'yes' : 'no'); ...more code...print_r('and again'.(($a == "blah") ? 'yes' : "no")); - mulllhausen
我可以相当安全地选择 $js = /*<js>*/"一些JavaScript代码"/*<js>*/ 或类似的东西 :) - mulllhausen

0

你试过这个 php.vim 语法文件吗?


我刚试了一下,它不起作用。它应该立即工作还是我需要设置选项才能在我的PHP字符串中显示JavaScript语法高亮? - mulllhausen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接