我是一名Web开发人员,我经常要编写CSS:
我总是按字母顺序对样式进行排序,这样:
.sorted_product_mens_color_list li, .sorted_product_womens_color_list li {
margin: 0 5px 0 5px;
padding: 5px;
border: 2px solid black;
}
Run Code Online (Sandbox Code Playgroud)
变成:
.sorted_product_mens_color_list li, .sorted_product_womens_color_list li {
border: 2px solid black;
margin: 0 5px 0 5px;
padding: 5px;
}
Run Code Online (Sandbox Code Playgroud)
但是,这是重复的,我想通过编写在VIM中执行此操作的脚本来自动化它.
我将如何1):sort在所有大括号内的文件中循环运行或2)在目录中的所有CSS文件中运行它?(任意一个)
应@Edmund的要求,我将添加一个答案:g/{/+,/}/-sort进一步解释.该:g命令的语法是
:{range}g/pattern/{ex command(s)}
Run Code Online (Sandbox Code Playgroud)
要考虑的初始范围是空白的,默认搜索整个文件.该模式{用于搜索左大括号.
:g/{/{ex command(s)}
Run Code Online (Sandbox Code Playgroud)
该命令是余数.在这种情况下,该ex命令是+,/}/-sort.这会分解为可选范围(" +,/}/-"),后跟命令(sort)以在该范围上执行.该范围从当前行开始(由" :g"命令找到)并向前移动一行(+这将是+1默认值为1的同义词)行.然后" ,"将范围的开始与范围的结束分开.为了找到范围的第二行,我们向前搜索下一个右括号(" /}/"),然后返回一行(" -",再次等同于" -1").现在我们已经将范围定义为"从我们找到的开口支撑之后的线,通过关闭支撑之前的线",sort 该范围的前命令.
对于单个文件,您可以这样做:
:g/{/normal! f{viB:sort^M
Run Code Online (Sandbox Code Playgroud)
这是做什么的:
:g/{/ :对于包含a的每一行 {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
Run Code Online (Sandbox Code Playgroud)
" In vim
:argdo g/{/normal! f{viB:sort^M:update^M
Run Code Online (Sandbox Code Playgroud)
它:update是相同的:write,除了如果没有修改缓冲区它不会触发写入.