在Vim获得相对路径

时间:2010-12-24 09:00:04

标签: vim relative-path

说我正在运行Vim并且pwd返回

/home/rafid/myproject

并说我正在编辑文件

/home/rafid/myproject/website/editpage.php

是否有任何命令可以为我返回?

website/editpage.php

即文件相对于当前文件夹的路径。

6 个答案:

答案 0 :(得分:16)

虽然expand('%')经常有用,但rare occasions却没有。但是你可以通过调用fnamemodify来强制Vim始终显示相对路径:

:echo fnamemodify(expand("%"), ":~:.")

从手册:

    :.      Reduce file name to be relative to current directory, if
            possible.  File name is unmodified if it is not below the
            current directory.
            For maximum shortness, use ":~:.".

:~是可选的。如果可能,它将减少相对于您的主文件夹的路径(~/...)。 (不幸的是,这只适用于您的主页;如果您未以/home/fred身份登录,则不会将~fred转换为fred。)

如果您的空间有限,并且可以使用关于文件所在位置的“模糊”信息进行管理,请查看pathshorten()将文件夹名称压缩为一个字符:

:echo pathshorten('~/.vim/autoload/myfile.vim')
~/.v/a/myfile.vim

参考::h fnamem<Tab>:h pathsh<Tab>

答案 1 :(得分:11)

另一个选择是编写一个vim函数。这是我的谦卑尝试:

function! Relpath(filename)
    let cwd = getcwd()
    let s = substitute(a:filename, l:cwd . "/" , "", "")
    return s
endfunction

使用任何完整路径名称调用Relpath,它将从其参数中删除当前目录名称。

例如,尝试:echo Relpath(expand("%:p")):p修饰符要求Vim返回完整路径)。显然,在您的情况下这不是必需的,因为%本身会返回相对路径。但是,在其他情况下它可能会派上用场。

答案 2 :(得分:5)

这对我有用:

:echo expand("%")

答案 3 :(得分:1)

如果你使用autocmd来设置你正在处理的缓冲区的当前目录(cd%:p:h)那么你只需输入:cd

答案 4 :(得分:0)

是的,您可以使用

:ARGS

这将为您提供当前文件的文件名,以供参考。

答案 5 :(得分:0)

  

块引用     这对我有用:
   :echo expand(&#34;%&#34;)

仅当您使用相对文件打开该文件时,此功能才有效:

for vi ./foo, expand("%") will be ./foo

for vi /tmp/foo expand("%") will be /tmp/foo