如何让 Vim 选项卡不显示完整文件路径,并且在打开同名文件时只显示相对文件夹?
How to let Vim tabs NOT display full file path and only display relative folders when there are files with same names open?
问题
我知道 a variant of this question 可能已经回答了。
我试过了:set guitablabel=%t
,但是有两个问题:
- 它在终端的 Vim 中不起作用(因为 gui 设置仅适用于 GVim)。我专门使用终端 Vim,所以给出的答案不适用。
- 不同目录下的同名文件不显示其相对文件夹以示区分。
现状
为了更好地理解我的问题,假设我有一个项目文件夹,awesome-project
具有以下结构:
awesome-project
AAA/
file1.txt
file2.txt
CCC/
special.txt
BBB/
file2.txt
file3.txt
DDD/
special.txt
说我 cd
在我的终端中的项目和 vim
从 there.Then 我继续在单独的选项卡中打开所有文件。
目前,我的 vim 设置为显示如下选项卡(|
是分隔符 - 发挥你的想象力!):
AAA/file1.txt | AAA/file1.txt | AAA/CCC/special.txt | BBB/file2.txt | BBB/file3.txt | BBB/DDD/special.txt
我想要的
我希望选项卡显示为:
file1.txt | AAA/file2.txt | CCC/special.txt | BBB/file2.txt | file3.txt | DDD/special.txt
或者 Sublime Text 的作用:
file1.txt | file2.txt --- AAA | special.txt --- AAA/CCC | file2.txt --- BBB | file3.txt | special.txt --- BBB/DDD
本质上,鉴于当前选项卡的文件名是唯一的,所有选项卡都应该只显示它们的文件名。否则,提供要在选项卡中显示的第一个不同的相对文件夹,以便我可以分辨哪些文件是文件。
这是许多其他文本编辑器(Sublime Text、Atom)中的一个功能,我真的很想保留它,因为相对路径文件名对我来说太长了。
如有任何帮助,我们将不胜感激:
- 解决问题的简单命令(耶!)
- 一个可用的插件
- 关于如何在
.vimrc
中手动配置的提示
不出所料,您误解并误用了标签页。
就像 Atom 或 Sublime Text 一样,Vim 是一个基于文档的程序,但与其他程序不同的是,它不使用 "tab" 隐喻作为这些文档的代理。相反,标签页 workspaces 旨在包含一个或多个 windows,它们本身 viewports 旨在显示缓冲区。缓冲区 Vim 等同于其他编辑器中的文档,幸运的是,没有内置的方法来拥有 "always-on" 缓冲区列表。 "Thankfully" 因为这样的功能和其他编辑器一样毫无用处。
我建议您习惯 Vim 基于缓冲区的工作流程,而不是使用标签页作为文档代理——这无论如何都行不通。
Here is a bit of reading 助您顺利起步。
我也在尝试做同样的事情。如果您有兴趣编写自己的制表符行,则需要阅读 tabline 和 setting-tabline。但是,如果你只是想要一个简单的,你可以随意将它复制到你的 vimrc:
"tabline
if exists("+showtabline")
function MyTabLine()
let s = ''
let t = tabpagenr()
let i = 1
while i <= tabpagenr('$')
let buflist = tabpagebuflist(i)
let winnr = tabpagewinnr(i)
let s .= '%' . i . 'T'
let s .= (i == t ? '%1*' : '%2*')
let s .= ' '
let s .= '|'. i . ')'
let s .= ' %*'
let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
let file = bufname(buflist[winnr - 1])
let file = fnamemodify(file, ':p:t')
if file == ''
let file = '[No Name]'
endif
let s .= file
let s .= ' '
let i = i + 1
endwhile
let s .= '%T%#TabLineFill#%='
let s .= (tabpagenr('$') > 1 ? '%999XX' : 'X')
return s
endfunction
set stal=2
set tabline=%!MyTabLine()
endif
问题
我知道 a variant of this question 可能已经回答了。
我试过了:set guitablabel=%t
,但是有两个问题:
- 它在终端的 Vim 中不起作用(因为 gui 设置仅适用于 GVim)。我专门使用终端 Vim,所以给出的答案不适用。
- 不同目录下的同名文件不显示其相对文件夹以示区分。
现状
为了更好地理解我的问题,假设我有一个项目文件夹,awesome-project
具有以下结构:
awesome-project
AAA/
file1.txt
file2.txt
CCC/
special.txt
BBB/
file2.txt
file3.txt
DDD/
special.txt
说我 cd
在我的终端中的项目和 vim
从 there.Then 我继续在单独的选项卡中打开所有文件。
目前,我的 vim 设置为显示如下选项卡(|
是分隔符 - 发挥你的想象力!):
AAA/file1.txt | AAA/file1.txt | AAA/CCC/special.txt | BBB/file2.txt | BBB/file3.txt | BBB/DDD/special.txt
我想要的
我希望选项卡显示为:
file1.txt | AAA/file2.txt | CCC/special.txt | BBB/file2.txt | file3.txt | DDD/special.txt
或者 Sublime Text 的作用:
file1.txt | file2.txt --- AAA | special.txt --- AAA/CCC | file2.txt --- BBB | file3.txt | special.txt --- BBB/DDD
本质上,鉴于当前选项卡的文件名是唯一的,所有选项卡都应该只显示它们的文件名。否则,提供要在选项卡中显示的第一个不同的相对文件夹,以便我可以分辨哪些文件是文件。
这是许多其他文本编辑器(Sublime Text、Atom)中的一个功能,我真的很想保留它,因为相对路径文件名对我来说太长了。
如有任何帮助,我们将不胜感激:
- 解决问题的简单命令(耶!)
- 一个可用的插件
- 关于如何在
.vimrc
中手动配置的提示
不出所料,您误解并误用了标签页。
就像 Atom 或 Sublime Text 一样,Vim 是一个基于文档的程序,但与其他程序不同的是,它不使用 "tab" 隐喻作为这些文档的代理。相反,标签页 workspaces 旨在包含一个或多个 windows,它们本身 viewports 旨在显示缓冲区。缓冲区 Vim 等同于其他编辑器中的文档,幸运的是,没有内置的方法来拥有 "always-on" 缓冲区列表。 "Thankfully" 因为这样的功能和其他编辑器一样毫无用处。
我建议您习惯 Vim 基于缓冲区的工作流程,而不是使用标签页作为文档代理——这无论如何都行不通。
Here is a bit of reading 助您顺利起步。
我也在尝试做同样的事情。如果您有兴趣编写自己的制表符行,则需要阅读 tabline 和 setting-tabline。但是,如果你只是想要一个简单的,你可以随意将它复制到你的 vimrc:
"tabline
if exists("+showtabline")
function MyTabLine()
let s = ''
let t = tabpagenr()
let i = 1
while i <= tabpagenr('$')
let buflist = tabpagebuflist(i)
let winnr = tabpagewinnr(i)
let s .= '%' . i . 'T'
let s .= (i == t ? '%1*' : '%2*')
let s .= ' '
let s .= '|'. i . ')'
let s .= ' %*'
let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
let file = bufname(buflist[winnr - 1])
let file = fnamemodify(file, ':p:t')
if file == ''
let file = '[No Name]'
endif
let s .= file
let s .= ' '
let i = i + 1
endwhile
let s .= '%T%#TabLineFill#%='
let s .= (tabpagenr('$') > 1 ? '%999XX' : 'X')
return s
endfunction
set stal=2
set tabline=%!MyTabLine()
endif