Fix handling of buffer consisting only of a newline.

See #510.
This commit is contained in:
Andy Stewart
2018-12-13 10:50:02 +00:00
parent 9a23a2f207
commit 5c636b128e
2 changed files with 34 additions and 2 deletions

View File

@@ -374,8 +374,10 @@ endfunction
function! s:write_buffer(bufnr, file)
let bufcontents = getbufline(a:bufnr, 1, '$')
" Special case: empty buffer; do not write an empty line in this case.
if len(bufcontents) > 1 || bufcontents != ['']
if bufcontents == [''] && line2byte(1) == -1
" Special case: empty buffer; do not write an empty line in this case.
" A nearly empty buffer of only a newline has line2byte(1) == 1.
else
if getbufvar(a:bufnr, '&endofline')
\ || (!getbufvar(a:bufnr, '&binary')
\ && (!exists('+fixendofline') || getbufvar(a:bufnr, '&fixendofline')))

View File

@@ -648,3 +648,33 @@ function Test_encoding()
call assert_equal([], s:signs('cp932.txt'))
endfunction
function Test_empty_file()
" 0-byte file
call system('touch empty.txt && git add empty.txt')
edit empty.txt
call s:trigger_gitgutter()
call assert_equal([], s:signs('empty.txt'))
" File consisting only of a newline
call system('echo "" > newline.txt && git add newline.txt')
edit newline.txt
call s:trigger_gitgutter()
call assert_equal([], s:signs('newline.txt'))
" 1 line file without newline
" Vim will force a newline unless we tell it not to.
call system('echo -n "a" > oneline.txt && git add oneline.txt')
set noeol nofixeol
edit! oneline.txt
call s:trigger_gitgutter()
call assert_equal([], s:signs('oneline.txt'))
set eol fixeol
endfunction