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

时间:2010-02-10 01:54:38

标签: vim

当我进入命令模式并输入

:!mycommand %

我在当前文件上执行了我的命令(%扩展为当前文件名)。 是否有类似的构造扩展完整文件名(带完整路径)?

我正在使用Windows。

6 个答案:

答案 0 :(得分:155)

:!mycommand %:p

相关:

:!cd %:p:h

答案 1 :(得分:64)

其他两个答案对我不起作用(出于某种原因)。但是,我发现这个组合在正常模式下输入时显示完整路径:

1 然后 Ctrl G

来源:Vim Tips Wiki上的“Get the name of the current file”。另请参阅:help CTRL-G{count}CTRL-G部分。

答案 2 :(得分:29)

附加:p,例如

:!mycommand %:p

%:p:h将为您提供文件所在目录的路径。

答案 3 :(得分: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)的绝对路径的任何符号链接,以及然后execsource fnameescape - ed文件名包含在函数本地vim变量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")

注意:

参考

答案 4 :(得分:2)

答案 5 :(得分:0)

如果您想使用vimrc中的完整路径,可以使用以下内容:

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

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