Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I would like to come up with a Vim substitution command to turn multi-line CSS rules, like this one:

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

into compacted single-line rules, like so:

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

I have a ton of CSS rules that are taking up too many lines, and I cannot figure out the :%s/ commands to use.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
527 views
Welcome To Ask or Share your Answers For Others

1 Answer

Here's a one-liner:

:%s/{\_.{-}}/=substitute(submatch(0), '
', '', '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 ' ' 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), '[{;]', '
', 'g')/

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...