如果我没有足够的终端列来显示多选项卡vim会话中的所有文件名,它会截断文件名的开头,以便将它们全部放入选项卡中:

有足够的空间:

vim - 当多标签vim中没有足够的空间时,将文件名截短而不是截短-LMLPHP

没有足够的空间:

vim - 当多标签vim中没有足够的空间时,将文件名截短而不是截短-LMLPHP

如您所见,它已经从前面截断了名称,这使得它们更难找到。我可以扭转这种行为,使vim从名称的后面截断吗?

最佳答案

TL; DR:没有简单的选择,但是(GUI和终端)选项卡是完全可定制的,因此您确实可以根据需要进行调整。

:help setting-tabline 都提供了用于调整选项行的文档以及示例MyTabLine()函数,

只是一个简单的示例,导致选项卡页面行
类似于默认值,但未为修改后的缓冲区添加+或
截断名称。

然后甚至提到您想要的行为:

如果没有足够的空间,您将希望以一种巧妙的方式减小标签的宽度。

实施截断

为了从右侧截断,您可以使用 strpart() (但它基于字符计数,并且需要对非ASCII字符进行显式处理)或 matchstr() 。将后者与 /\%v 正则表达式原子结合使用,您还可以匹配字符宽度,处理制表符和全角字符:

:echo matchstr('a 日本語 string that is too long', '^.*\ze\%>10v.*$')
a 日本語 s

像我的ingo-library plugin这样的库函数还可以提供截断指示符:
:echo ingo#strdisplaywidth#TruncateTo('a 日本語 string that is too long', 10)a 日本語 …:echo ingo#avoidprompt#TruncateTo('a 日本語 string that is too long', 10)a 日…long

09-28 08:09