diff --git a/autoload/gitgutter.vim b/autoload/gitgutter.vim index 3b1770a..eaf5f8f 100644 --- a/autoload/gitgutter.vim +++ b/autoload/gitgutter.vim @@ -3,7 +3,7 @@ let s:nomodeline = (v:version > 703 || (v:version == 703 && has('patch442'))) ? " Primary functions {{{ function! gitgutter#all() abort - for buffer_id in tabpagebuflist() + for buffer_id in gitgutter#utility#dedup(tabpagebuflist()) let file = expand('#' . buffer_id . ':p') if !empty(file) call gitgutter#process_buffer(buffer_id, 0) @@ -69,7 +69,7 @@ function! gitgutter#disable() abort call extend(buflist, tabpagebuflist(i + 1)) endfor - for buffer_id in buflist + for buffer_id in gitgutter#utility#dedup(buflist) let file = expand('#' . buffer_id . ':p') if !empty(file) call gitgutter#utility#set_buffer(buffer_id) diff --git a/autoload/gitgutter/utility.vim b/autoload/gitgutter/utility.vim index 0888a73..319cf6d 100644 --- a/autoload/gitgutter/utility.vim +++ b/autoload/gitgutter/utility.vim @@ -164,6 +164,12 @@ function! gitgutter#utility#highlight_name_for_change(text) abort endif endfunction +" Dedups list in-place. +" Assumes list has no empty entries. +function! gitgutter#utility#dedup(list) + return filter(sort(a:list), 'index(a:list, v:val, v:key + 1) == -1') +endfunction + function! gitgutter#utility#strip_trailing_new_line(line) abort return substitute(a:line, '\n$', '', '') endfunction