How to insert a block of white spaces starting at the cursor position in vi?
Solution 1
I'd use :%s/^/ /
You could also specify a range of lines :10,15s/^/ /
Or a relative range :.,+5s/^/ /
Or use regular expressions for the locations :/A/,/D/>
.
For copying code to paste on SO, I usually use sed from the terminal sed 's/^/ /' filename
Shortcut
I just learned a new trick for this. You enter visual mode v
, select the region (with regular movement commands), then hit :
which gives you this:
:'<,'>
ready for you to type just the command part of the above commands, the marks '<
and '>
being automatically set to the bounds of the visual selection.
To select and indent the current paragraph:
vip>
or
vip:>
followed by enter.
Edit:
As requested in the comments, you can also add spaces to the middle of a line using a regex quantifier \{n}
on the any meta-character .
.
:%s/^.\{14}/& /
This adds a space 14 chars from the left on each line. Of course %
could be replaced by any of the above options for specifying the range of an ex command.
Solution 2
When on the first A, I'd go in block visual mode ctrl-v
, select the lines you want to modify, press I
(insert mode with capital i
), and apply any changes I want for the first line. Leaving visual mode esc
will apply all changes on the first line to all lines.
Probably not the most efficient on number of key-strokes, but gives you all the freedom you want before leaving visual mode. I don't like it when I have to specify by hand the line and column range in a regex command.
Solution 3
I'd use >}.
Where...
Hope this helps.
Solution 4
- Ctrl + v (to enter in visual mode)
- Use the arrow keys to select the lines
- Shift + i (takes you to insert mode)
- Hit space keys or whatever you want to type in front of the selected lines.
- Save the changes (Use :w) and now you will see the changes in all the selected lines.
Solution 5
I would do like Nigu. Another solution is to use :normal
:
<S-v>
to enter VISUAL-LINE mode3j
orjjj
or/D<CR>
to select the lines:norm I<Space><Space>
, the correct range ('<,'>
) being inserted automatically
:normal
is probably a bit overkill for this specific case but sometimes you may want to perform a bunch of complex operations on a range of lines.
Comments
-
nye17 almost 3 years
Suppose I have the piece of text below with the cursor staying at the first
A
currently,AAAA BBB CC D
How can I add spaces in front of each line to make it like, and it would be great if the number of columns of spaces can be specified on-the-fly, e.g., two here.
AAAA BBB CC D
I would imagine there is a way to do it quickly in visual mode, but any ideas?
Currently I'm copying the first column of text in visual mode twice, and replace the entire two column to spaces, which involves > 5 keystrokes, too cumbersome.
Constraint:
Sorry that I didn't state the question clearly and might create some confusions.
The target is only part of a larger file, so it would be great if the number of rows and columns starting from the first
A
can be specified.Edit:
Thank both @DeepYellow and @Johnsyweb, apparently
>}
and>ap
are all great tips that I was not aware of, and they both could be valid answers before I clarified on the specific requirement for the answer to my question, but in any case, @luser droog 's answer stands out as the only viable answer. Thank you everyone! -
nye17 over 12 yearsyou mean in visual mode right? I only use this when the number of spaces is the same as what I specified in vimrc for the indentation....
-
johnsyweb over 12 yearsThis is in normal mode. You didn't specify the shift-width (or at least you hadn't when I answered).
-
luser droog over 12 years@nye17: you don't
set shiftwidth=4 softtabstop=4 expandtab
? -
nye17 over 12 years@luserdroog yep, I did have them set.
-
luser droog over 12 years@nye17: cool. just checking. I didn't learn about expandtab until very recently.
-
nye17 over 12 yearsOh! This is actually very great trick! Whatever change for the first line will end up being applied to the rest of the selected block! Thanks for sharing!
-
Codie CodeMonkey over 12 yearsThat's what's fun about VIM, there's always something to discover. This was new to me.
-
luser droog almost 11 yearsWow, you already told us about this! I +1-ed it, but I must not have read it very closely.
:normal
is my new friend. -
romainl almost 11 years
:normal
will be your friend forever. -
HenioJR over 6 yearsAnd to add blankspace after 14 characters in all lines of file?
-
luser droog over 6 yearsThis should do it:
:%s/^.\{14}/& /
-
Eliethesaiyan over 5 yearsThis actully does ident from the most left of the file,not the original position if it was already indented
-
D. Ben Knoble over 4 yearsEr, why
vip>
? Just>ip
-
Nijat Aliyev about 2 yearsThis is the best and shortest solution