我是网络开发人员,我经常要编写CSS:
我总是按字母顺序对样式进行排序,以便:
.sorted_product_mens_color_list li, .sorted_product_womens_color_list li {
margin: 0 5px 0 5px;
padding: 5px;
border: 2px solid black;
}
变成:
.sorted_product_mens_color_list li, .sorted_product_womens_color_list li {
border: 2px solid black;
margin: 0 5px 0 5px;
padding: 5px;
}
然而,这是重复的,我想通过编写一个在VIM中执行此操作的脚本来自动化它。
我如何1)在所有大括号内的文件循环中运行:sort
或
2)在目录中的所有CSS文件中运行它? (任何一个)
答案 0 :(得分:9)
应@Edmund的请求,我会添加一个答案,以进一步解释:g/{/+,/}/-sort
。 :g
命令的语法是
:{range}g/pattern/{ex command(s)}
要考虑的初始范围是空白的,默认搜索整个文件。模式为{
,用于搜索左大括号。
:g/{/{ex command(s)}
该命令是余数。在这种情况下,该ex命令是+,/}/-sort
。这会分解为可选范围(" +,/}/-
"),然后是在该范围内执行的命令(sort
)。该范围从当前行开始(由" :g
"命令找到)并前进一个(+
,它与+1
同义,因为默认值为1)线。那么" ,
"将范围的开始与范围的结尾分开。为了找到范围的第二行,我们向前搜索下一个右括号(" /}/
")然后返回一行(" -
&# 34;,再次等同于" -1
")。现在我们已经从我们找到的左大括号后面的行中定义了范围,通过右大括号之前的行#34;,我们在该范围内执行sort
ex命令
答案 1 :(得分:8)
对于单个文件,您可以这样做:
:g/{/normal! f{viB:sort^M
这是做什么的:
:g/{/
:对于包含{
normal!
:进入正常模式(!
只是跳过命令中的映射)f{
:找到(首先,但这不应该是css(?)中的问题){
viB
:在大括号:sort
:嗯...对视觉选择进行排序^M
:按回车键(这是一个字符,请使用<C-v><CR>
键入)对于您可以执行的多个文件:
# From you shell
# In zsh you would use 'vim **/*.css' to open all the css files in nested directories
# Not sure about your shell
$> vim *.css # open css files in the current directory
" In vim
:argdo g/{/normal! f{viB:sort^M:update^M
:update
与:write
相同,但如果未修改缓冲区则不会触发写入。