What's the easiest way to delete the first 2 spaces for each line using VIM? Basically it's repeating "2x" for each line.
Clarification: here the assumption is the first 2 characters are spaces. So the question is about doing indentation for multiple lines together.
Enter visual mode ( ctrl + v) jj to select the lines. shift + i to go into insert. Delete 2 spaces ( with backspace or delete)
Assuming you still have lines with leading spaces, type . to repeat the shift command. Type . repeatedly until all the spaces are gone. If you want to remove the leading spaces from all lines to the end of the buffer, use <G and then .
To remove all lines containing a particular string in the vi or Vim text editors, you can use the g command to globally search for the specified string and then, by putting a "d" at the end of the command line, specify that you want all lines containing the specified string deleted.
Ctrl-V
(or Ctrl-Q
if you use Ctrl-V
for paste);d
to delete the selected area.Esc
Some more options. You can decided which is the "easiest way".
Remove the first 2 characters of every line:
:%normal 2x
Remove first 2 characters of every line, only if they're spaces:
:%s/^ /
Note that the last slash is optional, and is only here so that you can see the two spaces. Without the slash, it's only 7 characters, including the :
.
Move indentation to left for every line:
:%normal <<
You could also use a search and replace (in the ex editor, accessed via the : character):
Remove first two characters no matter what:
%s/^.\{2}//
Remove first two white space characters (must be at the beginning and both must be whitespace... any line not matching that criteria will be skipped):
%s/^\s\{2}//
Assuming a shiftwidth=2
, then using shift with a range of %
:%<
Two spaces, or two characters? (2x
does the latter.)
:[range]s/^ //
deletes two blanks at the beginning of each line; use %
(equivalent to 1,$
) as [range]
do to this for the entire file.
:[range]s/^..//
deletes the first two characters of each line, whatever they are. (Note that it deletes two characters, not necessarily two columns; a tab character counts as one character).
If what you're really doing is changing indentation, you can use the <
command to decrease it, or the >
command to increase it. Set shiftwidth
to control how far it shifts, e.g.
:set shiftwidth=2
I'd try one of two approaches:
Ctrl+V
(often mapped to Ctrl+Q
).q1
(or any other number/letter you want to denote the recording register), then replay that macro multiple times using @1
(to use my previous example. Even better, use a preceding number to tell it how many times to run - 10@1
to run that macro 10 times, for example. It does, however, depends on what you recorded - make sure to rewind the cursor 0
or drop one line j
, if that's relevant.I'd also add: learn how to configure indentation for vim. Then a simple gg=G
will do the trick.
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