2011-05-30 22 views
15

我正在處理幾個項目,每個項目都使用不同的縮進樣式(用於各種文件類型)。例如每個縮進級別1個選項卡,2或4個空格等。如何自動切換這些不同樣式?我通常喜歡使用製表符縮進,但是我厭倦了輸入:在使用空格縮進代碼時一直設置expandtabs。可能的解決方案將包括根據文件路徑或項目根目錄中的某些配置加載一段vim配置。有沒有一個插件可以以優雅的方式爲我解決這個問題?如何在vim中實現項目特定的縮進?

回答

12
  1. 看那cinoptions選項和softtabstop選項(和expandtab,但你知道)。
  2. 在你「的〜/ .vimrc」,定義每個地方你把一些項目像源目錄緩存條目自動命令:

    augroup ProjectSetup 
    au BufRead,BufEnter /path/to/project1/* set et sts=2 cindent cinoptions=... 
    au BufRead,BufEnter /path/to/project2/* set noet sts=4 cindent cinoptions=... 
    augroup END 
    

    如果項目的語言混合,需要針對不同的設置那麼,你也可以添加 狀延伸:

    au BufRead,BufEnter /path/to/project1/*.{c,h} set noet sts=0 cindent cinoptions=... 
    au BufRead,BufEnter /path/to/project1/*.py set et sts=4 
    
+0

你能否提出一種基於vim文件類型而不是文件擴展名區分語言的方法?我喜歡你的答案,但這部分看起來像是重複我的配置的一部分。謝謝! – VoY 2011-05-30 08:56:56

+0

@VOY:自動命令也有'FileType'事件。但是它的模式與文件類型匹配,所以你必須自己檢查路徑。或者你可以把代碼放在'〜/ .vim/after/ftplugin/.vim'中,但是你必須再次檢查你自己的路徑。 – 2014-01-09 07:53:36

14

我使用該插件localvimrc,這不正是你所要求的:

有時,當您在不同的項目上工作時,您遇到了問題,他們使用不同的縮進,製表符擴展等。你需要的vimrc爲從覆蓋您的首選設置每個項目的〜/ .vimrc

3

是的,有:如果您使用的Project Plugin,您可以指定其內容正在評估每一次文件,你打開該項目的文件(該文件被稱爲in.vim)。 in.vim的反義詞是out.vim:每次您離開項目時都會執行此項目。

+0

其實我使用項目插件,但切換到自動命令(請參閱其他答案)設置項目特定的選項(我也設置像makeprg等東西)。項目插件的in /​​ out.vim的問題是,如果你首先輸入的不是來自項目插件的緩衝區,而是例如來自quickfix列表(在':make'或':grep'後面)或顯式命令(' :e%:rh'通常在C/C++中非常有用)。 – 2011-05-30 12:38:44

3

EditorConfig,它的Vim plugin

什麼是EditorConfig?

EditorConfig幫助開發人員定義和維護不同編輯器和IDE之間的一致編碼風格 。 EditorConfig項目 包含用於定義編碼樣式的文件格式和文本編輯器插件的集合 ,它們使編輯人員能夠讀取文件格式並且遵循定義的樣式。 EditorConfig文件易於閱讀,並且可以與版本控制系統很好地協作。

在其他幾件事情中,它允許您設置縮進。這是非常簡單和最重要的標準化方式,由許多不同的編輯器和IDE-s支持,因此它不僅會爲您設置適當的縮進,而且可能會讓所有人在項目中工作。

您只需要在項目根目錄下創建一個.editorconfig文件,並且Vim會自動找到它(假設您已經安裝了插件),並設置適當的值。示例配置文件:

root = true 

[*] 
charset = utf-8 
end_of_line = lf 
indent_style = space 
indent_size = 4 
insert_final_newline = true 
trim_trailing_whitespace = true 

[*.{js,html}] 
indent_size = 2 

[*.css] 
indent_size = 4