Suppose I'm editing the following document (* = cursor):
Lions
Tigers
Kittens
Puppies
*
Humans
What sequence can I use to delete the surrounding white space so that I'm left with:
Lions
Tigers
Kittens
Puppies
*
Humans
Note: I'm looking for an answer that handles any number of empty lines, not just this exact case.
EDIT 1: Line numbers are unknown and I only want to effect the span my cursor is in.
EDIT 2: Edited example to show I need to preserve leading whitespace on edges
Thanks
Easy. In normal mode, dipO<Esc>
should do it.
Explanation:
dip
on a blank line deletes it and all adjacent blank lines.O<Esc>
opens a new empty line, then goes back to normal mode.Even more concise, cip<Esc>
would roll these two steps into one, as suggested by @Lorkenpeist.
A possible solution is to use the :join
command with a range:
:?.?+1,/./-1join!
Explanation:
[range]join!
will join together a [range]
of lines. The !
means with out inserting any extra space.?.?+1
1
in +1
can be assumed this can be abbreviated ?.?+
/./-1
1
can be assumed so, /./-
//-
:join
can be shorted to just :j
Final shortened command:
:?.?+,//-j!
Here are some related commands that might be handy:
1) to delete all empty lines:
:g/^$/d
:v/./d
2) Squeeze all empty lines into just 1 empty line:
:v/./,//-j
For more help see:
:h :j
:h [range]
:h :g
:h :v
Short Answer: ()V)kc<esc>
In normal mode, if you type ()
your cursor will move to the first blank line. (
moves the cursor to the beginning of the previous block of non-blank lines, and )
moves the cursor to the end (specifically, to the first blank line after said block). Then a simple d)
will delete all text until the beginning of the next non-blank line. So the complete sequence is ()d)
.
EDIT: You're right, that deletes the whitespace at the beginning of the next non-blank line. Instead of d)
try V)kd
. V
puts you in visual line mode, )
jumps to the first non-blank line (skipping the whitespace at the beginning of the line), k
moves the cursor up one line. At this point you've selected all the blank lines, so d
deletes the selection.
Finally, type O
(capital O) followed by escape to crate a new blank line to replace the ones you deleted. Alternatively, replacing dO<Escape>
with c<Escape>
does the same thing with one less keystroke, so the entire sequence would be ()V)kc<Esc>
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With