使用父文件夹显示Vim相对路径

时间:2013-06-06 18:26:24

标签: vim relative-path

我通常使用GVim打开多个标签,我通常会在我正在处理的任何缓冲区上手动切换我的工作目录。

然后每个选项卡作为标签获取其缓冲区中各自文件的相对路径。 但是,这仅在其他文件在文件夹中向下时才有效,而其他文件显示从我的主文件夹开始的完整路径。

是否可以根据需要使用..使vim显示相对于:pwd的所有路径?

示例:

:pwd -> /home/files/folder1

tab1label = file1
tab2label = ../folder2/file2

编辑: 我实际上刚刚意识到GVim的默认行为正是我想要的,但是只要我:cd到另一个文件夹..就会消失。

4 个答案:

答案 0 :(得分:1)

你查过邮件列表了吗?我找到了两个有用的答案,但也许你会找到更多。

我不确定这些是否可以回答你的问题,但它们可能会帮助你引导你走向正确的方向。

答案 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
相关问题