From 09bc754efc75a68d4dee76d2f4f022f6616099de Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Thu, 26 Sep 2019 16:56:19 +0100 Subject: [PATCH] Fix splitting on a string not a pattern --- autoload/gitgutter/diff_highlight.vim | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/autoload/gitgutter/diff_highlight.vim b/autoload/gitgutter/diff_highlight.vim index f702dcc..6ffe657 100644 --- a/autoload/gitgutter/diff_highlight.vim +++ b/autoload/gitgutter/diff_highlight.vim @@ -104,8 +104,8 @@ function! s:diff(rline, aline, rlinenr, alinenr, rprefix, aprefix, regions, whol let lcs = s:lcs(rtext, atext) " TODO do we need to ensure we don't get more than 2 elements when splitting? if len(lcs) > s:gap_between_regions - let redits = split(rtext, lcs, 1) - let aedits = split(atext, lcs, 1) + let redits = s:split(rtext, lcs) + let aedits = s:split(atext, lcs) call s:diff(redits[0], aedits[0], a:rlinenr, a:alinenr, prefix+1, prefix+1, a:regions, 0) call s:diff(redits[1], aedits[1], a:rlinenr, a:alinenr, prefix+1+len(redits[0])+len(lcs), prefix+1+len(aedits[0])+len(lcs), a:regions, 0) return @@ -204,3 +204,22 @@ if $VIM_GITGUTTER_TEST return s:common_suffix(a:a, a:b, a:start) endfunction endif + + +" Split a string on another string. +" Assumes 1 occurrence of the delimiter. +function! s:split(str, delimiter) + let i = stridx(a:str, a:delimiter) + + if i == 0 + return ['', a:str[len(a:delimiter):]] + endif + + return [a:str[:i-1], a:str[i+len(a:delimiter):]] +endfunction + +if $VIM_GITGUTTER_TEST + function! gitgutter#diff_highlight#split(str, delimiter) + return s:split(a:str, a:delimiter) + endfunction +endif