diff --git a/lib/nerdtree/bookmark.vim b/lib/nerdtree/bookmark.vim index 45f9950..307211b 100644 --- a/lib/nerdtree/bookmark.vim +++ b/lib/nerdtree/bookmark.vim @@ -280,14 +280,17 @@ endfunction " FUNCTION: Bookmark.str() {{{1 " Get the string that should be rendered in the view for this bookmark function! s:Bookmark.str() - let pathStrMaxLen = winwidth(g:NERDTree.GetWinNum()) - 4 - len(self.name) + let pathStrMaxLen = winwidth(g:NERDTree.GetWinNum()) - 4 - strdisplaywidth(self.name) if &nu let pathStrMaxLen = pathStrMaxLen - &numberwidth endif let pathStr = self.path.str({'format': 'UI'}) - if len(pathStr) > pathStrMaxLen - let pathStr = '<' . strpart(pathStr, len(pathStr) - pathStrMaxLen) + if strdisplaywidth(pathStr) > pathStrMaxLen + while strdisplaywidth(pathStr) > pathStrMaxLen && strchars(pathStr) > 0 + let pathStr = strcharpart(pathStr, 1) + endwhile + let pathStr = '<' . pathStr endif return '>' . self.name . ' ' . pathStr endfunction diff --git a/lib/nerdtree/path.vim b/lib/nerdtree/path.vim index 7fc726e..f436d36 100644 --- a/lib/nerdtree/path.vim +++ b/lib/nerdtree/path.vim @@ -719,8 +719,10 @@ function! s:Path.str(...) if has_key(options, 'truncateTo') let limit = options['truncateTo'] - if len(toReturn) > limit-1 - let toReturn = toReturn[(len(toReturn)-limit+1):] + if strdisplaywidth(toReturn) > limit-1 + while strdisplaywidth(toReturn) > limit-1 && strchars(toReturn) > 0 + let toReturn = strcharpart(toReturn, 1) + endwhile if len(split(toReturn, '/')) > 1 let toReturn = '