vim 中 .ejs 文件的语法突出显示

发布于 2024-10-10 19:14:07 字数 125 浏览 6 评论 0原文

让 vim 突出显示 ejs (http://embeddedjs.com/) 文件的最佳方法是什么? 是否可以为文件设置 html 突出显示,并为 <% %> 内的部分设置 javascript 突出显示? 感谢您的帮助!

What is the best way to make vim highlight ejs (http://embeddedjs.com/) files?
Is it possible to set up html highlight for the file in general and javascript highlight to it's parts inside <% %>?
Appreciate your help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

属性 2024-10-17 19:14:07

感谢 @inkedmn 只是想指出 html 绑定效果更好,因此将其放入 ~/.vimrc 文件中:

au BufNewFile,BufRead *.ejs set filetype=html

Credits goes to @inkedmn just wanted to point out that html binding works way better, therefore put this in your ~/.vimrc file:

au BufNewFile,BufRead *.ejs set filetype=html
梦里人 2024-10-17 19:14:07

这是我今天突发奇想的东西(对 eruby 脚本做了一些修改)。它需要安装 vim-javascript 插件。

https://github.com/briancollins/vim-jst

Here's something I whipped up today (made some modifications to the eruby script). It requires the vim-javascript plugin to be installed.

https://github.com/briancollins/vim-jst

风蛊 2024-10-17 19:14:07

我将此语法文件直接下载到中获得了最佳结果~/.vim/语法

I've had the best results downloading this syntax file directly into ~/.vim/syntax

み青杉依旧 2024-10-17 19:14:07

如果您希望它们像常规 .js 文件一样突出显示,您可以将其添加到您的 .vimrc 中:

au BufNewFile,BufRead *.ejs set filetype=js

不能 100% 确定这就是您想要的 - 希望它有所帮助。

If you want them to be highlighted like regular .js files, you could add this to your .vimrc:

au BufNewFile,BufRead *.ejs set filetype=js

Not 100% sure that's what you're after - hope it helps.

×眷恋的温暖 2024-10-17 19:14:07

对于在适当的情况下使用 javascript 和 html 语法(并且不依赖任何第三方 javascript 插件)的解决方案,您需要一个 ftDetect 文件,该文件在带有 .ejsautocmd > 扩展名与 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()

和一个语法文件(来自user456584的答案):~/.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"

For a solution that uses javascript and html syntax where appropriate (and not rely on any third-party javascript plugins) you need an ftdetect file which runs autocmd when files with the .ejs extension are loaded combined with an ejs syntax file.

If you're not concerned with how it works I've put a package together than you can grab from github here. If using Vundle just add this to your .vimrc:

Bundle 'nikvdp/ejs-syntax'

To do it yourself, create two files in your ~/.vim folder:

An ftdetect file: ~/.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()

And a syntax file (from user456584's answer) : ~/.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"
┊风居住的梦幻卍 2024-10-17 19:14:07

试试这个,

cd /usr/share/vim/vim74/syntax #maybe vim64 or other
cp html.vim ejs.vim
vim ejs.vim

你可以编辑 html.vim
但我建议你不要...
然后找到

syn region  javaScript start=+<script\_[^>]*>+ keepend end=+</script>+me=s-1` contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc

并写

  syn region  ejsScript start=+<%+ keepend end=+%>+ contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc

在该行下。

找到

  HtmlHiLink javaScript             Special

add

  HtmlHiLink ejsScript             Special

其下的

将此行添加到您的 ~/.vimrc

au BufNewFile,BufRead *.ejs set filetype=ejs

现在您的 ejs 代码将看起来像 js 代码...
或者你只是想让它看起来像别的东西?

替换

  HtmlHiLink ejsScript             Special

为(例如)

 hi def ejsScript                 term=bold cterm=bold gui=bold

事实上,在这个例子中,两行可以共存......

这使你的代码变得可爱〜

你可以阅读 这个 来帮助你了解 vim 语法

try this

cd /usr/share/vim/vim74/syntax #maybe vim64 or other
cp html.vim ejs.vim
vim ejs.vim

you can just edit html.vim
but I suggest you not...
then find

syn region  javaScript start=+<script\_[^>]*>+ keepend end=+</script>+me=s-1` contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc

and write

  syn region  ejsScript start=+<%+ keepend end=+%>+ contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc

under that line.

find

  HtmlHiLink javaScript             Special

add

  HtmlHiLink ejsScript             Special

under it

add this line to your ~/.vimrc

au BufNewFile,BufRead *.ejs set filetype=ejs

now your ejs code will looks like js code...
or you just want it looks like something else?

replase

  HtmlHiLink ejsScript             Special

by (for example)

 hi def ejsScript                 term=bold cterm=bold gui=bold

in fact, in this example,the two line can live together...

it makes your code lovely~

you can read this to help you with your vim-syntax

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文