我在Vim中编写了很多Perl。通常我只是将一些CGI脚本放在一起并将CSS放入程序代码中。最近我问自己是否可能,在我的代码中对这些块进行一些特定于Vim的注释,以便vim突出显示特定区域而不是Perl脚本,而是作为级联样式表。
使用Mojolicious时,这也很简洁,您可以将整个模板嵌入到DATA区域,但会丢失HTML的所有突出显示。
当然,我可以在文件类型/突出显示之间手动切换。但我想知道是否有更好的方法。
谢谢, 斯文
答案 0 :(得分:6)
您可以为单个文件设置多个文件类型:
:set ft=perl.css
通过这种方式,您可以获得两种语言的omnicompletion(以及适用的片段)和半正确突出显示:如果您将CSS规则放在引号中,它将突出显示为字符串。
我刚刚发现(昨天)一个很酷的插件,受到名为NrrwRgn的Emacs功能的启发。它允许您选择代码的“区域”,比如Perl文件的CSS部分,并在您:set ft=css
的临时窗口中编辑它。每个保存都会反映在原始窗口中。在处理完整的PHP / HTML / JS / CSS的PHP模板时非常有用。
答案 1 :(得分:4)
如果您不想提出自己的混合突出显示规则:
:set syntax=perl
然后当你想编辑css时,
:set syntax=css
为了方便起见,您可以在.vimrc中映射两个键,这样可以方便地来回切换。
map <F3> :execute "set syntax=perl" <CR>
map <F4> :execute "set syntax=css" <CR>
答案 2 :(得分:4)
我不熟悉Perl以及CSS如何适应代码,但是如果你使用heredocs,这里有一篇很好的文章来处理类似的问题:http://blogs.perl.org/users/ovid/2011/06/syntax-highlight-your-sql-heredocs-in-vim.html
作者试图做的是在标有SQL
分隔符的heredocs中突出显示SQL。在您的情况下,您可以在.vim/after/ftplugin/perl.vim
:
syntax on
unlet b:current_syntax
syntax include @CSS syntax/css.vim
syntax region cssSnip matchgroup=Snip start=+<<['"]CSS['"].*;\s*$+ end=+^\s*CSS$+ contains=@CSS
hi link Snip SpecialComment
只要你这样写,就会突出显示CSS:
my $css = <<"CSS";
a {
background-color: blue;
}
CSS
如果您想将评论用作分隔符,则可以破解上述代码段,尤其是start
和end
模式。例如,这个:
syntax region cssSnip matchgroup=Snip start=+^\s*# -- CSS --\s*$+ end=+^\s*# -- END CSS --\s*$+ contains=@CSS
让你在特定的评论中突出显示如下:
# -- CSS --
a {
background-color: blue;
}
# -- END CSS --
答案 3 :(得分:1)
您可以使用我的SyntaxRange plugin。假设您使用@cssbegin@
/ @cssend@
分隔CSS行,请将以下内容放入~/.vim/after/syntax/perl/perl_cssinclude.vim
:
:call SyntaxRange#Include('^@cssbegin@', '^@cssend@', 'css', 'NonText')