Using Vim, how can I make CSS rules into one liners?
If you are at the beginning or end of the rule, V%J
will join it into a single line:
- Go to the opening (or closing) brace
- Hit
V
to enter visual mode - Hit
%
to match the other brace, selecting the whole rule - Hit
J
to join the lines
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')/