2010-03-25 59 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