vim-patch:9.1.0704: inserting with a count is inefficient (#30206)

Problem:  inserting with a count is inefficient
Solution: Disable calculation of the cursor position and topline, if a
          count has been used (Ken Takata)

Optimize insertion when using :normal 10000ix.

This patch optimizes the insertion with a large count (e.g. `:normal
10000ix`).

It seems that calculation of the cursor position for a long line is slow
and it takes O(n^2). Disable the calculation if not needed.

Before:
```
$ time ./vim --clean -c 'normal 10000ix' -cq!
real    0m1.879s
user    0m1.328s
sys     0m0.139s

$ time ./vim --clean -c 'normal 20000ix' -cq!
real    0m5.574s
user    0m5.421s
sys     0m0.093s

$ time ./vim --clean -c 'normal 40000ix' -cq!
real    0m23.588s
user    0m23.187s
sys     0m0.140s
```

After:
```
$ time ./vim --clean -c 'normal 10000ix' -cq!
real    0m0.187s
user    0m0.046s
sys     0m0.093s

$ time ./vim --clean -c 'normal 20000ix' -cq!
real    0m0.217s
user    0m0.046s
sys     0m0.108s

$ time ./vim --clean -c 'normal 40000ix' -cq!
real    0m0.278s
user    0m0.093s
sys     0m0.140s

$ time ./vim --clean -c 'normal 80000ix' -cq!
real    0m0.494s
user    0m0.311s
sys     0m0.140s

$ time ./vim --clean -c 'normal 160000ix' -cq!
real    0m1.302s
user    0m1.140s
sys     0m0.094s
```

closes: vim/vim#15588

09b80d23cf

Co-authored-by: Ken Takata <kentkt@csc.jp>
This commit is contained in:
zeertzjq
2024-09-01 06:21:36 +08:00
committed by GitHub
parent 6f167fcae9
commit ea2998fec9
2 changed files with 13 additions and 6 deletions

View File

@@ -987,7 +987,7 @@ describe('ui/mouse/input', function()
command('set sidescroll=0')
feed('<esc>:set nowrap<cr>')
feed('a <esc>20Ab<esc>')
feed('a <esc>17Ab<esc>3Ab<esc>')
screen:expect([[
|*2
bbbbbbbbbbbbbbb^b |
@@ -1017,7 +1017,7 @@ describe('ui/mouse/input', function()
command('set sidescroll=0')
feed('<esc>:set nowrap<cr>')
feed('a <esc>20Ab<esc>')
feed('a <esc>17Ab<esc>3Ab<esc>')
screen:expect([[
|*2
bbbbbbbbbbbbbbb^b |