2011-07-28 29 views
4

我在Vim中編寫了很多Perl。通常我只是將一些CGI腳本拼湊在一起,並將CSS放入程序代碼中。所以最近我問自己是否有可能在代碼中放置一些Vim特定的註釋,以便vim將特定區域不是作爲Perl腳本強調,而是作爲級聯樣式表。在文件中逐段更改文件類型(或其他Vim設置)?

與Mojolicious一起工作時,您可以將整個模板嵌入數據區,但是會丟失HTML的所有高亮區。

當然,我可以在文件類型/突出顯示之間手動切換。但我想知道是否有更好的方法。

感謝, 斯文

+0

IMO的vim的語法高亮的最大限制之一是這樣做沒有一些相當惱人的黑客的能力。 – kenny

回答

4

如果你不想拿出你自己的混合動力高亮規則:

:set syntax=perl 

那麼當你想編輯CSS,

:set syntax=css 

爲了方便起見,您可以在.vimrc中爲兩個鍵映射一些鍵,這可以很容易地來回切換。

map <F3> :execute "set syntax=perl" <CR> 
map <F4> :execute "set syntax=css" <CR> 
+0

另外,這裏是一個vim插件,它正在做你正在做的事情,只針對ruby和html:http://www.vim.org/scripts/script.php?script_id=403也許你可以調整它來滿足你的需求perl/css需要 – tester

4

我不熟悉Perl以及如何CSS代碼中的配合,但如果你使用here文檔,這裏有一個很好的文章,與類似的問題涉及:什麼是作者試圖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$+ [email protected] 

hi link Snip SpecialComment 

的CSS將被突出顯示,只要你寫這樣的:

my $css = <<"CSS"; 
    a { 
    background-color: blue; 
    } 
CSS 

如果你想使用註釋分隔符相反,你可以破解上面的代碼片段,特別是startend模式。例如,這樣的:

syntax region cssSnip matchgroup=Snip start=+^\s*# -- CSS --\s*$+ end=+^\s*# -- END CSS --\s*$+ [email protected] 

獲取您的具體意見中強調,像這樣:

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

你可以有多個文件類型的單個文件設置:

:set ft=perl.css 

隨着你得到兩種語言的omnicompletion(和片段,如果適用)以及半正確的突出顯示:如果將CSS規則放在引號中,它將以字符串形式突出顯示。

我剛剛發現(昨天)一個很酷的插件,它受Emacs功能NrrwRgn的啓發。它允許你選擇一個代碼的「區域」,比如說你的Perl文件的CSS部分,並在你爲其編寫的臨時窗口中進行編輯。每個保存都反映在原始窗口中。處理充滿PHP/HTML/JS/CSS的PHP模板時非常有用。