2013-04-24 52 views
24

我使用Jekyll編寫博客文章,爲此我最終在同一個文件中使用三種不同的語言:開始時用於發佈元數據的YAML,正文中的Markdown以及代碼片段中的C++。混合使用兩種語法高亮腳本

我試圖安裝一個腳本,這樣我可以有vim的突出三個正確的我,結束了在語法/ jekyll.vim是這樣的:

" Build upon Markdown syntax 
runtime! syntax/markdown.vim 

" pretend there's no syntax loaded 
unlet b:current_syntax 
" Bring in YAML syntax for front matter 
syntax include @Yaml syntax/yaml.vim 
syntax region yamlFrontmatter start=/\%^---$/ end=/^---$/ keepend [email protected] 

" pretend there's no syntax loaded 
unlet b:current_syntax 
" Bring in C++11 syntax for code snippets 
syntax include @Cpp syntax/cpp.vim 
syntax region cppCodeSnippet matchgroup=Comment start=/^{% highlight cpp %}$/ end=/^{% endhighlight %}$/ keepend [email protected] 

let b:current_syntax='jekyll' 

我還設置了一個文件檢測腳本將ft設置爲此語法。

差不多的作品。當我打開一個被檢測爲這種類型的文件時,我會得到一切正確的,除了用於C++高亮。但是,如果在此之後輸入:syn on,則一切正常。我可以刪除緩衝區並再次打開文件,所有高亮都可以。如果我關閉vim並重新啓動它,我需要再次運行:syn on

我錯過了什麼?我該如何調試這個問題?

+0

你有沒有運行':verbose se ft?語法?'?你可以找出(使用':debug'?)加載cpp緩衝區時哪個(Syntax)自動命令按順序被觸發?添加':語法同步fromstart'是否會改變事物? – sehe 2013-04-24 21:39:45

+3

可能的重複[如何用不同的語法語法突出顯示文件的一部分?](http://stackoverflow.com/questions/16162221/how-to-syntax-highlight-a-part-of-file-in -a-different-syntax) – Makoto 2013-04-26 05:50:26

+0

聽起來像是我的加載順序問題。如果我不得不猜測,我會說在cpp.vim之後加載了一些東西,導致它第二次運行。您可以嘗試添加cpp.vim,之後可能會告訴您這是否是加載順序問題。你也可能想做:verbose set eventignore?除了ft?和語法?否則,你可以使用echom和:messages來調試它。 – doliver 2013-10-01 04:13:53

回答

3

快速修復:追加syntax on.vimrc的最後一行,這是一樣的直播會話設置:syn on

不那麼簡單:

看起來你可能已經安裝除了默認的語法文件自定義「化身」語法$VIMRUNTIME

根據Vim wiki section on custom syntax,最好將所有個人定製保存在~/.vim之內。例如,將jekyll.vim語法放入~/.vim/syntax/

請勿使用包含Vim發佈的文件的目錄,因爲這些文件在升級過程中將被覆蓋(特別是,不要使用$ VIMRUNTIME目錄)。

Vim syntax docs
:syntax enable運行 ':源$ VIMRUNTIME /語法/ DEFAULT_SYNTAX.vim'。
:syn on(或:syntax on)將「用默認設置覆蓋您的設置」。

因此,如果設置:syntax on使您的自定義語法有效,它必須包含在默認語法集中。

嘗試保留所有的自定義內容在~/.vim,看看是否解決事情。