2012-06-05 79 views
3

爲++通常安裝在/usr/include/c++/4.x(Linux中)C標準報頭。由於大多數頭文件沒有任何擴展名(.h,.hpp等),因此vim無法將這些文件的格式識別爲C++。檢測文件類型C++標準頭用vim

我已經看到了所以這等question,但張貼在那裏的解決方案並沒有解決我的問題。其中一種解決方案涉及使用modeline,但標準C++頭文件不包含vim友好籤名。相反,他們包括在第一行是這樣的:

// <algorithm> -*- C++ -*- 

我想我可以爲了檢測文件類型搜索該模式(-*- C++ -*-)。前面提到的SO問題中發佈的另一個解決方案實際上是朝着這個方向發展的答案建議使用:

au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif 

,所以我試圖做:

au BufRead * if search('-*- C++ -*-', 'nw') | setlocal ft=cpp | endif 

,但它不工作(即,未檢測到文件類型)。

是否可以使用該方法檢測文件類型?它是否存在任何插件或任何其他方式來解決這個問題?

+1

請看問題「[如何使Vim從家當線檢測文件類型?](http://stackoverflow.com/q/8890668/254635)」 –

回答

3

納米的回答是卓有成效的,但是這是更好:

au BufRead * if search('\M-*- C++ -*-', 'n', 1) | setlocal ft=cpp | endif 

額外的參數searchstopline,並確保該規則將只適用於文件與模式行。

這是很重要的,因爲如果沒有stopline包含模式,包括你的vimrc任何文件,將滿足匹配,並可能使用了錯誤的語法規則加以強調。

此外,使用stopline的w標誌是不必要的。

:help search以獲取更多信息。

3

*是Vim的搜索通常特別。要禁用它,在搜索字符串的開頭使用\M,即

au BufRead * if search('\M-*- C++ -*-', 'nw') | setlocal ft=cpp | endif 

這實際上對我的作品。