11

我安装了bnf.vim(突出显示 BNF 语法文件)。

假设我的代码中有一条评论:

/* <BNF>

<S> := <A> | h
<A> := a | b | c | .

</BNF> */

尽管整个文件的文件类型不同,Vim 是否可以通过某种方式编程以突出显示 BNF 语法中的注释?

4

3 回答 3

15

你可以使用我的SyntaxRange 插件

明确分配范围,例如

:10,20SyntaxInclude bnf

或自动基于分隔模式:

:call SyntaxRange#Include('<BNF>', '</BNF>', 'bnf')
于 2013-04-23T06:26:14.633 回答
1

对于许多文件类型,vim 将使用 heredoc 名称作为线索。例如,在 php 文件中,我经常在这里创建文档:

<?php 

$my_html = <<<html 
<h1>Solar</h1> 
<p>Is <em>good</em></p> 
html; 

$my_js = <<<javascript 
alert('yeah baby'); 
javascript; 

$my_sql = <<<sql 
SELECT user 
FROM mytable 
WHERE energy = 'solar'; 
sql; 

效果很好,唯一的问题是缩进有问题(结束标记不能有前面的空格)

于 2013-10-14T02:16:02.837 回答
0

我的用例是在 CloudFormation 模板中突出显示内联 Lambda 函数。使用上述SyntaxRange 插件,我将其添加到我的.vimrc

autocmd Syntax * call SyntaxRange#Include('vim: set ft=js:','vim: set ft=js:','javascript')

然后在我的模板中:

  Function:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: myFunction
      Code:
        ZipFile:
          !Sub |
            // vim: set ft=js:

            const aws = require('aws-sdk');
            const aws4 = require('aws4');
            const https = require('https');
            const zlib = require('zlib');

            ...

            // vim: set ft=js:

# vim: set ft=yaml:
于 2020-08-12T12:46:47.047 回答