I installed bnf.vim (highlights BNF grammar files).
Suppose I have a comment in my code:
/*
:= | h
:= a | b |
You can use my SyntaxRange plugin for that.
Either explicitly assign the range, e.g.
:10,20SyntaxInclude bnf
or automatically based on the delimiting patterns:
:call SyntaxRange#Include('<BNF>', '</BNF>', 'bnf')
My use case was highlighting an inline Lambda function in a CloudFormation template. Using the above-mentioned SyntaxRange plugin, I added this to my .vimrc
:
autocmd Syntax * call SyntaxRange#Include('vim: set ft=js:','vim: set ft=js:','javascript')
And then in my template:
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:
for many file types vim will use the heredoc names as a clue. For example in php files I'm often creating here docs thus:
<?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;
works beautifully, with only problem being that indentation is problematic (the closing marker cannot have preceding spaces)