Using vi, how can I make CSS rules into one liners?

后端 未结 7 909
眼角桃花
眼角桃花 2020-12-05 05:55

Example bad:

#main {
      padding:0;
      margin: 10px auto;
}

Example good:

#main {padding:0;margin:10px auto;}
<         


        
7条回答
  •  有刺的猬
    2020-12-05 06:36

    Here's a one-liner:

    :%s/{\_.\{-}}/\=substitute(submatch(0), '\n', '', 'g')/
    

    \_. matches any character, including a newline, and \{-} is the non-greedy version of *, so {\_.\{-}} matches everything between a matching pair of curly braces, inclusive.

    The \= allows you to substitute the result of a vim expression, which we here use to strip out all the newlines '\n' from the matched text (in submatch(0)) using the substitute() function.

    The inverse (converting the one-line version to multi-line) can also be done as a one liner:

    :%s/{\_.\{-}}/\=substitute(submatch(0), '[{;]', '\0\r', 'g')/
    

提交回复
热议问题