2012-12-21 57 views
1

假設我在vim中加載了一個python文件。 :scriptnames的快速檢查顯示我的~/.vim/ftplugin/python/python.vim文件按預期加載。該文件中的其中一個命令會突出顯示所有超過第80列的字符。現在讓我說我在另一個緩衝區中打開一個C++文件(因此運行~/.vim/ftplugin/cpp/cpp.vim)。儘管執行了新命令,但python.vim中的設置仍然適用;因此字符在我的C++文件中突出顯示在第80列之後。如何避免vim中的累積文件類型命令?

有沒有辦法使filetype命令不像這樣累積?我在.vimrc中有filetype plugin indent on

回答

3

的問題是,無論'colorcolumn':match(你沒有指定是否使用新設置或上了年紀的亮點做法)是本地的窗口,但ftplugins應該只設置緩衝區局部設置。

爲什麼這些設置窗口本地?這允許您在兩個窗口中顯示相同的緩衝區,其中一個顯示在另一個窗口中,另一個沒有突出顯示。

你能做些什麼來防止這種情況發生?

a)不要在ftplugin中設置它,而是使用映射來切換顏色列的開啓/關閉。

b)將:setlocal nocolorcolumn放入您正在使用的所有文件類型的所有ftplugin腳本(例如,在~/.vim/after/ftplugin/*.vim中)。只有在同一個窗口中切換不同的文件類型時,這纔會起作用。

C)來解決這個正確的(但最複雜的)方式是通過在BufWinEnterBufWinLeaveWinLeave事件一對夫婦的:autocmd秒。

+0

這是一些其他命令的情況嗎?例如,設置字體,甚至是插件特定的命令,例如更改SuperTab中的默認完成類型。基本上我想有一個所有文件類型的命令列表,另一個只適用於當前顯示特定文件類型的緩衝區。你的(c)建議是否是最好的方法?如果是這樣,你能詳細解釋一下嗎?謝謝。 – kamek

+1

這取決於設置。看看':help'settingname'',你會發現_local to ..._暗示那裏。對於特定於插件的命令,它們通常是全局的;對於他們的配置,你可以看到正在使用的變量的作用域:'g:...'是全局的,'b:'是緩衝區本地的。 –

+0

謝謝。我將研究我設置的命令的影響範圍,並根據您的建議進行更改。 – kamek

相關問題