让 Vim 正确高亮脚本 type="text/html"

Dan*_*Dan 5 html javascript vim syntax-highlighting

我怎样才能让Vim在这样的情况下正确地语法突出显示(例如与Knockout模板一起使用):

<script type="text/html" id="my-template">
  <!-- This should be rendered as HTML -->
  <div>Some template</div>
</script>

<script>
  //This should be rendered as Javascript
  var x = function() { return 3; }
</script>
Run Code Online (Sandbox Code Playgroud)

这里给出的解决方案涉及编辑Vim的内部语法文件,这似乎是错误的,它专门寻找标签中不再需要的text/javascript“ ” 。<script>

我认为解决方案是某种语法插件,我可以保留在我的.vim目录中,但我对 Vim 的语法内部结构不够熟悉,无法弄清楚它。

(请注意,此问题和答案不适用,因为我没有使用 Ruby on Rails。)

buf*_*uff 1

首先将 vim 的内部 html 语法文件复制到 ,$HOME/.vim/syntax/html.vim以便您只更改自己的行为,而不是全局更改。

然后找到起始行syn region javaScript并将其替换为两行

syn region  script_notype start=+<script>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
syn region  script_jstype start=+<script[^>]*type="text/javascript"[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
Run Code Online (Sandbox Code Playgroud)

第一行用于普通<script>选项卡,第二行用于<script type="text/javascript">.

但是,这不包括<script>标签不type具有其他属性的情况。这种情况应该得到 javascript 语法,但没有。我想这是一个小问题。