我安装了bnf.vim(突出显示 BNF 语法文件)。
假设我的代码中有一条评论:
/* <BNF>
<S> := <A> | h
<A> := a | b | c | .
</BNF> */
尽管整个文件的文件类型不同,Vim 是否可以通过某种方式编程以突出显示 BNF 语法中的注释?
你可以使用我的SyntaxRange 插件。
明确分配范围,例如
:10,20SyntaxInclude bnf
或自动基于分隔模式:
:call SyntaxRange#Include('<BNF>', '</BNF>', 'bnf')
对于许多文件类型,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;
效果很好,唯一的问题是缩进有问题(结束标记不能有前面的空格)
我的用例是在 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: