2011-07-23 40 views
3

考虑用于对齐CSS规则属性的Tabularize vim插件。例如vim Tabularize:如何忽略包含大括号的行

body { 
    margin: 0; 
    padding: 0; 
    font-family: arial, verdana; 
} 


在用光标VIM规则内vi{:Tab /:\zs导致

body { 
    margin:  0; 
    padding:  0; 
    font-family: arial, verdana; 
} 


我想如图实现这一Tabularization整个CSS计算,而不是每个块。

通过:%Tab \:\zs规则名得到占左列宽度,这是不可取的。

一些CSS规则包含几个:,所以我的问题是如何忽略包含大括号的行?

回答

3

请尝试下面列出的命令。

:%g/:.*{/s/^/:/ | exe'%Tab/^[^:]*:\zs' | %s/^:\s*// 

可以将此命令映射到一个快捷方式,或保存的CSS文件 过程中自动运行它。

:au BufWrite *.css %g/:.*{/s/^/:/ | exe'%Tab/^[^:]*:\zs' | %s/^:\s*// 
+0

@Eric:我改变了启发式方法来解决选择器的问题。请注意,这可能会影响包含冒号的注释(更确切地说,在一行注释中的第一个冒号后间隔),很难。 –

+0

@ib这正是我需要的,谢谢 –

1

这里可以使用全局命令。我没有Tabularize,所以我的版本只是缩进所有的CSS块:

:%g/^.*{/+ | .,/}/-> 

的最后一个命令后,“|”是ex模式命令,用于将块从当前位置(每个开口大括号之下的一行)缩进到右大括号的上方。根据你所说的,我期望这个工作,但我没有尝试过:

:%g/^.*{/+ | Tab /:\zs 
+0

Tab的那个方面是完全内部的,所以没有多少希望。但它似乎不是一个很难写的脚本。这将不得不做两个通行证,一个找到正确的列,另一个做对齐。如果你不熟悉脚本,这将是一个很好的项目。如果你想让我这样做,只需添加一个赏金! :-) –