当我进入命令模式并键入
:!mycommand %
在当前文件上执行命令(将 %展开为当前文件名)。 是否有类似的结构来扩展完整文件名(使用完整路径) ?
%
我正在使用 Windows。
附加 :p,例如。
:p
:!mycommand %:p
%:p:h会给出文件所在目录的路径。
%:p:h
相关阅读:
:!cd %:p:h
另外两个答案对我不起作用(出于某种原因)。但是,我发现这个组合在正常模式下输入时会显示完整路径:
按 1然后按 CtrlG
来源: Vim Tips Wiki 上的“ 获取当前文件的名称”。参见 :help CTRL-G的 {count}CTRL-G部分。
:help CTRL-G
{count}CTRL-G
如果你想在你的 vimrc中使用完整路径,你可以这样做:
vimrc
let vimFiles = '$HOME/.vim' let absPath = expand(vimFiles . '/subDir')
这将为您提供一个在 Windows 上带有反斜杠的路径。
获取当前文件的名称 Http://vim.wikia.com/wiki/get_the_name_of_the_current_file
设置 _ working _ directory _ to _ the _ current _ file Http://vim.wikia.com/wiki/set_working_directory_to_the_current_file
要打印出当前的 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到 source,包含在函数局部 vim 变量 l:vimrcfilename中的 fnameescape-ed 文件名:
resolve()
expand()
<sfile>:p
%:p
exec
source
l:vimrcfilename
fnameescape
" 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")
备注:
:help fnamemodify
expand('<sfile>')
l:varname
:messages
参考文献