Для решения, которое использует синтаксис javascript и html, где это необходимо (и не полагается на сторонние плагины javascript), вам нужен файл ftdetect, который запускается autocmd
, когда загружаются файлы с расширением .ejs
в сочетании с ejsфайл синтаксиса.
Если вас не интересует, как это работает, я собрал пакет, чем вы можете скачать с github здесь .Если вы используете Vundle, просто добавьте это в ваш .vimrc:
Bundle 'nikvdp/ejs-syntax'
Чтобы сделать это самостоятельно, создайте два файла в папке ~/.vim
:
Файл ftdetect: ~/.vim/ftdetect/ejs.vim
:
autocmd BufNewFile,BufRead *.ejs set filetype=ejs
autocmd BufNewFile,BufRead *._ejs set filetype=ejs
function! s:DetectEjs()
if getline(1) =~ '^#!.*\<ejs\>'
set filetype=ejs
endif
endfunction
autocmd BufNewFile,BufRead * call s:DetectEjs()
И файл синтаксиса (из ответа пользователя 456584): ~/.vim/syntax/ejs.vim
runtime! syntax/html.vim
unlet b:current_syntax
" Include Java syntax
syn include @ejsJavaScript syntax/javascript.vim
syn region ejsScriptlet matchgroup=ejsTag start=/<%/ keepend end=/%>/ contains=@ejsJavaScript
syn region ejsExpr matchgroup=ejsTag start=/<%=/ keepend end=/%>/ contains=@ejsJavaScript
" Redefine htmlTag so that it can contain jspExpr
syn clear htmlTag
syn region htmlTag start=+<[^/%]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster,ejsExpr,javaScript
" syn keyword ejsPrint contained print
syn match javaScriptType /\<\zsvars\ze\./
syn match javaScriptSpecial /\<\zsexports\ze\./
syn match javaScriptFunction /\<\zsprint\ze(/
syn match javaScriptFunction /\<\zsinclude\ze(/
syn match javaScriptFunction /\<\zsincludeObject\ze(/
syn match javaScriptFunction /\<\zsfetch\ze(/
syn match javaScriptFunction /\<\zsfetchObject\ze(/
command -nargs=+ HiLink hi def link <args>
HiLink ejsTag htmlTag
delcommand HiLink
let b:current_syntax = "ejs"