如何扩展当前文件的完整路径以传递给Vim中的命令?


Answers:


161

:!mycommand %:p

有关:

:!cd %:p:h


23
您如何在VIM帮助中找到这些?
keflavich 2012年

57
@keflavich:help filename-modifiers
Annika Backstrom

要获取包含当前文件的目录,我认为%:h就足够了。为什么在这里需要%:p:h?
HVNSweeting

1
@HVNSweeting :%p是文件的绝对路径,而不是相对路径。:%p%h是文件父目录的绝对路径。使用just %:h可以产生相对路径。
Annika Backstrom

2
@HVNSweeting Shell:cd ~ ; vim .vimrc,Vim :,:!echo %:h应该显示'。' 相对路径。
Annika Backstrom

65

其他两个答案对我不起作用(由于某种原因)。但是,我发现在“普通”模式下键入此组合时,它将显示完整路径:

1然后按CtrlG

来源:Vim Tips Wiki上的“ 获取当前文件的名称 ”。另请参阅的{count}CTRL-G部分:help CTRL-G


5
那是一个不同的话题。问题是关于在命令字符串中包含缓冲区路径(因此,前导:!)。您的{count}CTRL-G序列用于在UI中显示完整路径。
Stefan Majewsky

3
@StefanMajewsky关于实际上把我带到这里的问题标题,这应该是选择的答案。
doc_id 2013年


9

要输出当前的vim文件名:

:help expand
:echo expand("%:p")    " absolute path
:echo expand("%:p:h")  " absolute path dirname
:echo expand("%:p:h:h")" absolute path dirname dirname
:echo expand("%:.")    " relative path
:echo expand("%:.:h")  " relative path dirname
:echo expand("%:.:h:h")" relative path dirname dirname

:echo expand("<sfile>:p")  " absolute path to [this] vimscript

:help filename-modifiers

例如(使用vim函数),到resolve()expand()任何符号链接到当前脚本的绝对路径<sfile>:p(而不是%:p),然后链接exec到函数本地vim变量中包含sourcefnameescape-ed文件名l:vimrcfilename

 "  g:__sfile__dirname     -- directory containing this vimrc script
 "                            after symlinks
 "                            ~dirname(abspath(realpath(__file__)))
 let g:__sfile__dirname=fnamemodify(resolve(expand("<sfile>:p")), ":h")

 "  Source_dotvim(filename)  -- source dirname(this_vimrc)/filename
 function Source_dotvim(filename)
     let l:vimrcfilename=g:__sfile__dirname . "/" . a:filename
     if filereadable(l:vimrcfilename) && !empty(l:vimrcfilename)
         "source s:vimrcfilename "this doesn't work, so exec:
         exec "source " . fnameescape(l:vimrcfilename)
     else
         echo l:vimrcfilename . " empty or not found."
     endif
 endfunction 

 call Source_dotvim("vimrc.local.01-env.vimrc")

笔记:

参考资料



0

如果您要在中使用完整路径vimrc,则可以使用以下方法:

let vimFiles = '$HOME/.vim'
let absPath  = expand(vimFiles . '/subDir')

这将为您提供Windows上带有反斜杠的路径。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.