在文件中按块更改文件类型(或其他Vim设置)?

在文件中按块更改文件类型(或其他Vim设置)?,vim,syntax-highlighting,block,file-type,Vim,Syntax Highlighting,Block,File Type,我用Vim编写了很多Perl程序。通常我只是拼凑一些CGI脚本并将CSS直接放入程序代码中。所以最近我问自己,是否有可能在我的代码中围绕这些块添加一些特定于Vim的注释,这样Vim就可以突出显示特定区域,而不是作为Perl脚本,而是作为级联样式表 在使用Mojolicious时,这也很好,因为您可以将整个模板嵌入到数据区域中,但会丢失HTML的所有突出显示 当然,我可以在文件类型/突出显示之间手动切换。但我想知道是否有更好的办法 谢谢, Sven如果您不想提出自己的混合突出显示规则: :set

我用Vim编写了很多Perl程序。通常我只是拼凑一些CGI脚本并将CSS直接放入程序代码中。所以最近我问自己,是否有可能在我的代码中围绕这些块添加一些特定于Vim的注释,这样Vim就可以突出显示特定区域,而不是作为Perl脚本,而是作为级联样式表

在使用Mojolicious时,这也很好,因为您可以将整个模板嵌入到数据区域中,但会丢失HTML的所有突出显示

当然,我可以在文件类型/突出显示之间手动切换。但我想知道是否有更好的办法

谢谢,
Sven

如果您不想提出自己的混合突出显示规则:

:set syntax=perl
然后当你想编辑css时

:set syntax=css
为了更简单,您可以在.vimrc中映射这两个键的一些键,这样可以更容易地来回切换

map <F3> :execute "set syntax=perl" <CR>
map <F4> :execute "set syntax=css" <CR>
map:execute“set syntax=perl”
映射:执行“set syntax=css”

我不熟悉Perl以及CSS在代码中的适用性,但是如果您使用heredocs,这里有一篇很好的文章可以处理类似的问题:

作者试图做的是突出显示用
SQL
分隔符标记的herecos中的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
:call SyntaxRange#Include('^@cssbegin@', '^@cssend@', 'css', 'NonText')
使您在特定注释中突出显示,如下所示:

# -- CSS --
  a {
    background-color: blue;
  }
# -- END CSS --

可以为单个文件设置多个文件类型:

:set ft=perl.css
这样,您就可以获得两种语言的omnicompletion(以及片段,如果适用的话)和半正确的突出显示:如果您将CSS规则放在引号中,它将作为字符串突出显示

我(昨天)刚刚发现了一个很酷的插件,它的灵感来自Emacs的一个特性,名为。它允许您选择代码的“区域”,比如Perl文件的CSS部分,并在一个临时窗口中对其进行编辑,您可以
:set ft=CSS
。每次保存都会反映在原始窗口中。在处理充满PHP/HTML/JS/CSS的PHP模板时非常有用。

您可以使用my。假设您使用
@cssbegin@
/
@cssend@
分隔CSS行,将以下内容放入
~/.vim/after/syntax/perl/perl\u cssinclude.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
:call SyntaxRange#Include('^@cssbegin@', '^@cssend@', 'css', 'NonText')

另外,这里有一个vim插件,它正在做您想要做的事情,只针对ruby和html:也许您可以调整它以满足您的perl/css需求。vim语法突出显示的最大限制之一是能够做到这一点,而不需要一些恼人的黑客。