summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/util.vim9
1 files changed, 6 insertions, 3 deletions
diff --git a/autoload/ale/util.vim b/autoload/ale/util.vim
index 1f396377..fcc03eb7 100644
--- a/autoload/ale/util.vim
+++ b/autoload/ale/util.vim
@@ -486,7 +486,7 @@ function! ale#util#Input(message, value) abort
endfunction
function! ale#util#HasBuflineApi() abort
- return exists('*deletebufline') && exists('*setbufline')
+ return exists('*deletebufline') && exists('*appendbufline') && exists('*getpos') && exists('*setpos')
endfunction
" Sets buffer contents to lines
@@ -507,8 +507,11 @@ function! ale#util#SetBufferContents(buffer, lines) abort
" Use a Vim API for setting lines in other buffers, if available.
if l:has_bufline_api
- call setbufline(a:buffer, 1, l:new_lines)
- call deletebufline(a:buffer, l:first_line_to_remove, '$')
+ let l:save_cursor = getpos('.')
+ call deletebufline(a:buffer, 1, '$')
+ call appendbufline(a:buffer, 1, l:new_lines)
+ call deletebufline(a:buffer, 1, 1)
+ call setpos('.', l:save_cursor)
" Fall back on setting lines the old way, for the current buffer.
else
let l:old_line_length = line('$')