Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
558 views
in Technique[技术] by (71.8m points)

regex - Using Vim, how can I make CSS rules into one liners?

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

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

1 Reply

0 votes
by (71.8m points)

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')/

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...