Reputation: 1496
In https://stackoverflow.com/a/11790464/5354137, there is a very detailed description how to, e.g. perform the same insert to the beginnings of all selected lines by placing the cursor over the first character of the first line, then after <C-v>
moving down, then Isomething<Esc><down>
inserting something
everywhere.
But how does one do the same thing in the case of lines of unequal length, such as:
'Lorem ipsum
'dolor sit amet,
'consectetur adipiscing elit,
'sed do...
to their respective line endings? E.g. if I wanted to insert ',
after m
, ,
, ,
and .
, how would I do that without resorting to :substitute
? (Or to a plugin, just using original vim-fu...)
Upvotes: 0
Views: 345
Reputation: 4846
The easiest way to do it is with the :substitute
command. Select the lines in visual mode and then do:
:'<,'>s/$/',/<CR>
The $
stands for the end of the line. Note that vim will already write the :'<,'>
part, so you only have to type from there.
With the question having been updated and :substitute
off the table, I'd suggest recording a macro. Place the cursor on the line with "Lorm ipsum" and do:
qaA',<Esc>jq
then call the macro three times for the remaining lines. Either by hitting @
a lot:
@a@@@@
or with the more elegant
3@a
As commented by @AndR, it's possible to record a macro that calls itself which will run until it reaches the end of the buffer:
qaqqaA',<Esc>j@aq
Note that the macro already calls itself with @a
.
Afterwards, call @a
and single quotes will be appended to every line until the end of the buffer.
Both @AndR's answer using :normal
and my :substitute
answer above rely on a visual selection of the lines to modify. It is possible without that by typing in a range or line numbers. For "Lorem ipsum..." on lines 1 through 4, type either of the two commands:
:1,4s/$/',/
:1,4norm A',
This has the benefit that it works without a visual selection and from anywhere in the buffer.
Upvotes: 4
Reputation: 491
Based on your reference link and reproduction steps, this is your problem halfway:
But how does one do the same thing in the case of lines of unequal length ...
Follow the link and use the first method Using only visual-block mode, let's start with step 5:
Select any column, hit <C-v>
to enter visual-block mode and expand your selection toward the bottom:
'Lo[r]em ipsum
'do[l]or sit amet,
'co[n]sectetur adipiscing elit,
'se[d] do...
Hit $
or <End>
(see :help $
), will get the selection like this:
'Lo[rem ipsum]
'do[lor sit amet,]
'co[nsectetur adipiscing elit,]
'se[d do...]
Hit A',<Esc>
to achieve your goal:
'Lorem ipsum',
'dolor sit amet,',
'consectetur adipiscing elit,',
'sed do...',
If you use the latest Vim9 and your virtualedit
option contains block
, when you hit $
or <End>
, you may see this selection (Vim8 won't):
'Lo[rem ipsum ]
'do[lor sit amet, ]
'co[nsectetur adipiscing elit, ]
'se[d do... ]
This could be a issue with the VIM9 or an intentional design? I don't know, but don't care, just press A
. You'll see your cursor at the end of the first line, which is fine (|
is the cursor position):
'Lorem ipsum|
'dolor sit amet,
'consectetur adipiscing elit,
'sed do...
Then you enter the text you need (e.g. ',
) and <Esc>
ends editing, it works fine:
'Lorem ipsum',
'dolor sit amet,',
'consectetur adipiscing elit,',
'sed do...',
As a supplement, oppositely, if you want to insert text in the same column where has no text when there are irregular endings : You can add block
to your virtualedit
option (see :h 'virtualedit'
), using other left-right-motions (e.g. l
or |
) instead of $
to get this selection:
'Lo[rem ipsum ]
'do[lor sit amet, ]
'co[nsectetur adipiscing elit, ]
'se[d do... ]
When you press A
, the cursor will be at (|
is the cursor position):
'Lorem ipsum |
'dolor sit amet,
'consectetur adipiscing elit,
'sed do...
Then enter the text you want (e.g. ',
), hit <Esc>
to obtain:
'Lorem ipsum ',
'dolor sit amet, ',
'consectetur adipiscing elit, ',
'sed do... ',
Upvotes: 2
Reputation: 512
Here the goal can be achieved by appending '
at the end of each line. In one line you'd normally do A'
. In order to do this this in each line of the visual selection, run
:<,>norm A'
Assuming that you have selected the needed lines visually (with v
or V
).
See :h :normal
for details.
Upvotes: 1