Mercurial > vim
view src/testdir/test78.in @ 10759:4267f8904d47 v8.0.0269
patch 8.0.0269: may get ml_get error when :perldo deletes lines
commit https://github.com/vim/vim/commit/85b5743d3e69f96882b6124d4b4ebf873ca24707
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jan 29 22:59:12 2017 +0100
patch 8.0.0269: may get ml_get error when :perldo deletes lines
Problem: May get ml_get error when :perldo deletes lines or switches to
another buffer. (Nikolai Pavlov, issue https://github.com/vim/vim/issues/1421)
Solution: Check the buffer and line every time.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 29 Jan 2017 23:00:05 +0100 |
parents | 7fe2c092913e |
children | ae45d497868f |
line wrap: on
line source
Inserts 10000 lines with text to fill the swap file with two levels of pointer blocks. Then recovers from the swap file and checks all text is restored. We need about 10000 lines of 100 characters to get two levels of pointer blocks. STARTTEST :so small.vim :set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo :e! Xtest ggdG :let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789" :let i = 1 :let linecount = 10000 :while i <= linecount | call append(i - 1, i . text) | let i += 1 | endwhile :preserve :" get the name of the swap file :redir => swapname :swapname :redir END :let swapname = substitute(swapname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '') :" make a copy of the swap file in Xswap :set bin :exe 'sp ' . swapname :w! Xswap :echo swapname :set nobin :new :only! :bwipe! Xtest :call rename('Xswap', swapname) :recover Xtest :call delete(swapname) :new :call append(0, 'recovery start') :wincmd w :let linedollar = line('$') :if linedollar < linecount | exe 'wincmd w' | call append(line('$'), "expected " . linecount . " lines but found only " . linedollar) | exe 'wincmd w' | let linecount = linedollar | endif :let i = 1 :while i <= linecount | if getline(i) != i . text | exe 'wincmd w' | call append(line('$'), i . ' differs') | exe 'wincmd w' | endif | let i += 1 | endwhile :q! :call append(line('$'), 'recovery end') :w! test.out :qa! ENDTEST