Here is the initial text.
test1 test2
Only two lines in the text.
I want to insert strings sequence into from 5th line into 16th line. I have tried it with below codes.
for i in range(1,12) echo ".item".i."," endfor
1.the initial text.
2.to enter into command mode and input the codes
Two problems to be solved.
1.echo command output the first string .item1
before endfor.
for i in range(1,12) echo ".item".i.","
2.How create the strings sequence into specified line:from 5th till 16th in edited text with vimscript?
The desired result is as below.
Almost done!
What i get is as below with the command :pu! =map(range(1,12), 'printf(''item%1d'', v:val)')
.
Both of them can't work.
:5pu! =map(range(1,12), 'printf(''item%1d'', v:val)') :5,16pu! =map(range(1,12), 'printf(''item%1d'', v:val)')
The last issue for my desired format is when the cursor is on the 3th line ,how to create the desired output?
2 Answers
Answers 1
In order to insert the missing lines, without inserting unrequired empty lines (-> append()
+ repeat([''], nb)
+ possible negative nb
)
:let lin = 5 - 1 :call append('$', repeat([''], lin-line('$')))
Then, in order to insert what you're looking for (no need for printf()
if you don't want to format the numbers)
:call append(lin, map(range(1,12), '"item".v:val'))
PS: I'd rather avoid :put
when I can as it's kind of difficult to use with complex expressions.
Answers 2
Assuming you are in a Unix based operating system, you have a seq
command. So you can do:
$ seq -f 'Item %.0f' 20 Item 1 Item 2 ... Item 20
Inside vim
you can try the reading from external command approach:
:r! seq -f 'Item \%.0f' 20
0 comments:
Post a Comment