Изменить тип файла (или другие настройки Vim) в файле? - PullRequest
4 голосов
/ 28 июля 2011

Я много программирую на Perl в Vim. Часто я просто собираю какой-нибудь CGI-скрипт и вставляю CSS прямо в программный код. Поэтому в последнее время я спрашивал себя, возможно ли это, добавить некоторые специфичные для Vim комментарии вокруг таких блоков в моем коде, чтобы vim выделял определенную область не в виде сценария Perl, а в виде каскадной таблицы стилей.

Это также было бы замечательно при работе с Mojolicious, где вы можете встраивать целые шаблоны просто в область DATA, но тогда потеряете всю подсветку HTML.

Конечно, я мог бы вручную переключаться между типами файлов / подсветкой. Но мне интересно, есть ли лучший способ.

Спасибо, Свен

Ответы [ 4 ]

6 голосов
/ 29 июля 2011

Вы можете установить несколько типов файлов для одного файла:

:set ft=perl.css

С этим вы получаете омниполнение (и фрагменты, если применимо) для обоих языков и полукорректное выделение: если вы поместите свои правила CSS вв кавычках он будет выделен в виде строки.

Я только что нашел (вчера) классный плагин, вдохновленный функцией Emacs под названием NrrwRgn .Он позволяет вам выбрать «регион» кода, скажем, CSS-часть вашего Perl-файла, и отредактировать его в рабочем окне, для которого вы :set ft=css.Каждое сохранение отражается в исходном окне.Очень полезно при работе с PHP-шаблонами, полными PHP / HTML / JS / CSS.

4 голосов
/ 29 июля 2011

Я не знаком с 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 --
4 голосов
/ 29 июля 2011

Если вы не хотите придумывать свои собственные правила гибридной подсветки:

:set syntax=perl

, тогда, когда вы хотите редактировать css,

:set syntax=css

Чтобы упростить задачу,Вы можете сопоставить некоторые ключи для обоих в вашем .vimrc, что позволит легко переключаться вперед и назад.

map <F3> :execute "set syntax=perl" <CR>
map <F4> :execute "set syntax=css" <CR>
1 голос
/ 24 августа 2012

Вы можете использовать мой SyntaxRange плагин для этого.Предполагая, что вы разделяете строки CSS с помощью @cssbegin@ / @cssend@, поместите следующее в ~/.vim/after/syntax/perl/perl_cssinclude.vim:

:call SyntaxRange#Include('^@cssbegin@', '^@cssend@', 'css', 'NonText')
...