说我正在运行Vim并且pwd返回
/home/rafid/myproject
并说我正在编辑文件
/home/rafid/myproject/website/editpage.php
是否有任何命令可以为我返回?
website/editpage.php
即文件相对于当前文件夹的路径。
答案 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