function! GitEditFiles() abort
if &modified
echoerr 'fatal: No write since last change.'
return
endif
let l:list_lines = systemlist('git ls-files')
if v:shell_error !=# 0
echomsg 'fatal: Git: ' . join(l:list_lines, "\n")
return
endif
let l:list_files = []
for l:filename in l:list_lines
if filereadable(l:filename)
call add(l:list_files, l:filename)
endif
endfor
if len(l:list_files) ==# 0
echo 'No Git files were found in the directory ' . getcwd()
return
endif
if len(l:list_files) > 7
for l:filename in l:list_lines
echo l:filename
endfor
echo "\n"
echo 'Git directory: ' . getcwd()
echo 'Number of Git files: ' . len(l:list_files)
echo "\n"
let l:answer = input('Edit? [y,n]')
if l:answer !=# 'y'
return
endif
endif
let l:first = 1
for l:file in l:list_files
if l:first
let l:first = 0
else
execute 'tabnew'
endif
execute 'edit ' . fnameescape(l:file)
endfor
endfunction
command! -nargs=0 GitEditFiles call GitEditFiles()
Code language: Vim Script (vim)