我通常使用GVim打开多个标签,我通常会在我正在处理的任何缓冲区上手动切换我的工作目录。
然后每个选项卡作为标签获取其缓冲区中各自文件的相对路径。 但是,这仅在其他文件在文件夹中向下时才有效,而其他文件显示从我的主文件夹开始的完整路径。
是否可以根据需要使用..
使vim显示相对于:pwd的所有路径?
示例:
:pwd -> /home/files/folder1
tab1label = file1
tab2label = ../folder2/file2
编辑:
我实际上刚刚意识到GVim的默认行为正是我想要的,但是只要我:cd
到另一个文件夹..
就会消失。
答案 0 :(得分:1)
你查过邮件列表了吗?我找到了两个有用的答案,但也许你会找到更多。
ShortGuiTabLabel()
功能,并提醒pathshorten()
Vim功能。我不确定这些是否可以回答你的问题,但它们可能会帮助你引导你走向正确的方向。
答案 1 :(得分:1)
我编写了自己的解决方案..因为这是我第一次尝试vim编码可能不是最好的,但是它运行正常。
function RelativePathString(file)
let filelist=split(a:file,'/')
if len(filelist) == 0
return "[No name]"
endif
let dir=getcwd()
let dirlist=split(dir,'/')
let finalString=""
let i = 0
for str in dirlist
if str !=# filelist[i]
break
else
let i += 1
endif
endfor
let j=0
let k=len(dirlist)-i
while j < k
let finalString .= "../"
let j += 1
endwhile
let j=len(filelist)-1
while i < j
let finalString .= filelist[i] . "/"
let i += 1
endwhile
let finalString .= filelist[i]
return finalString
endfunction
let &guitablabel="%!RelativePathString(expand('%:p'))"
答案 2 :(得分:0)
substitute(expand('%:p'), getcwd(), '..', '')
使用
/home/romainl
作为工作目录,上面的短片段转为
/home/romainl/.vim/helpers/functions.vim
到
../.vim/helpers/functions.vim
显然,当您编辑工作目录之外的文件时,它不会非常有用。
答案 3 :(得分:0)
与Svalorzen的相比,此解决方案的工作速度几乎快了两倍:
fu! RelativePathString(file)
if strlen(a:file) == 0
retu "[No Name]"
en
let common = getcwd()
let result = ""
while substitute(a:file, common, '', '') ==# a:file
let common = fnamemodify(common, ':h')
let result = ".." . (empty(result) ? '' : '/' . result)
endw
let forward = substitute(a:file, common, '', '')
if !empty(result) && !empty(forward)
retu result . forward
elsei !empty(forward)
retu forward[1:]
en
endf