Raf*_*fid 13 vim relative-path
说我正在运行Vim和pwd返回
/home/rafid/myproject
Run Code Online (Sandbox Code Playgroud)
并说我正在编辑该文件
/home/rafid/myproject/website/editpage.php
Run Code Online (Sandbox Code Playgroud)
是否有任何命令可以为我返回此信息?
website/editpage.php
Run Code Online (Sandbox Code Playgroud)
也就是说,文件相对于当前文件夹的路径.
joe*_*dle 18
虽然expand('%')经常有效,但在极少数情况下却没有.但你可以通过调用强制Vim始终显示相对路径fnamemodify:
:echo fnamemodify(expand("%"), ":~:.")
Run Code Online (Sandbox Code Playgroud)
从手册:
:. 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 ":~:.".
Run Code Online (Sandbox Code Playgroud)
这:~是可选的.如果可能,它将减少相对于您的主文件夹的路径(~/...).(不幸的是,仅适用于您的家,它不会把/home/fred成~fred,如果你不是在为登陆fred.)
如果您的空间有限,并且可以使用关于文件所在位置的"模糊"信息进行管理,那么请查看pathshorten()将文件夹名称压缩到一个字符的位置:
:echo pathshorten('~/.vim/autoload/myfile.vim')
~/.v/a/myfile.vim
Run Code Online (Sandbox Code Playgroud)
参考::h fnamem<Tab>和:h pathsh<Tab>
nim*_*odm 11
另一种选择是编写vim函数.这是我谦虚的尝试:
function! Relpath(filename)
let cwd = getcwd()
let s = substitute(a:filename, l:cwd . "/" , "", "")
return s
endfunction
Run Code Online (Sandbox Code Playgroud)
您使用任何完整路径名称调用Relpath,它将从其参数中删除当前目录名称.
例如,尝试:echo Relpath(expand("%:p"))(:p修饰符要求Vim返回完整路径).显然,在您的情况下这不是必需的,因为%它本身会返回相对路径.但是,在其他情况下它可能会派上用场.
这对我有用:
:echo expand("%")
Run Code Online (Sandbox Code Playgroud)