2010-03-25 52 views
12

我最近從TextMate移動到Vim,並且非常喜歡這個開關。然而,我對Vim在使用CSS語法的大括號中處理縮進的方式有些癢。我使用的是simple_pairs.vim,這可能與我的問題有關,也可能沒有,但我不這麼認爲,因爲PHP,JavaScript等工作正常。請讓我解釋一下...Vim中對CSS的縮進煩惱

我通常會將我的使用縮進,像這樣通過上下文的CSS規則:

ul#nav { 
    margin: 10px; 
} 
    ul#nav li { 
    float: left; 
    margin-right: 4px; 
    } 

這意味着,當我型我ul#nav li規則,其次是{(這將插入相應的}自動),並按下回車鍵,我想在大括號是在與ul#…相同的縮進級別,但我得到類似這樣的結果:

ul#nav { 
    margin: 10px; 
} 
    ul#nav li { 
} 

所以我必須手動縮進額外的步驟。就像我說的,在PHP,JavaScript等中做同樣的事情,工作正常。有誰知道我該如何解決這個問題?我不太瞭解Vim的語法定義文件,因爲我能夠弄清楚PHP語法文件中的內容,並將其移植到CSS之一上。謝謝。

+1

我懷疑它與'simple_pairs.vim'有關。我在我的電腦上試過了你的例子(沒有'simple_pairs'),它按照你想要的工作。 – Peter 2010-03-25 21:14:59

+0

啊,你是對的......猜猜我應該先試過。你(或其他人)對如何解決它有任何想法嗎? – 2010-03-25 21:34:21

+0

如果您對嵌套選擇器感興趣,則應該查看[SCSS](http://sass-lang.com/#nesting)。 – gmeben 2013-04-29 16:56:16

回答

11

我找到了一個很好的縮進代碼嵌套的大括號的位置:

https://gist.github.com/762326/bcbd35239db7f26447f1c2323037d20a5219471d

您可以將其保存到.vim /縮進/ css.vim,它會做縮進的一個更好的工作比默認的CSS。

此外,它也適用於.less文件,但您可能必須將這些文件關聯到.vimrc文件中。

github上的腳本和官方的css.vim是一樣的mantainer,只有6年更新。他們有幾條不同的路線。

+0

謝謝,它工作得很好。 – romainl 2011-04-27 18:35:39

0

這與cindentsmartindent有關。其中之一導致這種行爲。

我忘了我刪除哪一個(也許他們兩個?),但他們從我的~/.vimrc文件,並只保留autoindent

2

我這樣做對CSS文件:

au BufEnter *.css set nocindent 
au BufLeave *.css set cindent 

我沒有」沒有設置smartindent,但也可以添加。

這就是說,當您輸入.css文件的緩衝區時,應該取消設置cindent,並且應該在離開緩衝區時將其設置回來。

+2

如果cindent從一開始就沒有設置?我認爲最好使用setlocal(隻影響帶有.css文件的緩衝區),並使用BufRead,BufNewFile在打開一個css文件時設置它,例如, 'au BufRead,BufNewFile * .css setlocal nocindent'。 – olsner 2011-04-12 07:39:40