当我进入命令模式并输入
:!mycommand %
我在当前文件上执行命令(%
会被扩展为当前文件名)。
是否有类似的结构可以扩展完整的文件名(包括完整路径)?
我使用的是Windows。
当我进入命令模式并输入
:!mycommand %
我在当前文件上执行命令(%
会被扩展为当前文件名)。
是否有类似的结构可以扩展完整的文件名(包括完整路径)?
我使用的是Windows。
:!mycommand %:p
Related:
:!cd %:p:h
:help filename-modifiers
: - Annika Backstrom:%p
是文件的绝对路径,而不是相对路径。:%p%h
是文件所在目录的绝对路径。仅使用 %:h
可能会得到一个相对路径。 - Annika Backstromcd ~ ; vim .vimrc
,Vim::!echo%:h
,应该显示相对路径的“。”。 - Annika Backstrom%:.
,它返回相对于当前目录的文件路径 - 通常比绝对路径更方便。 - jobwat其他两个答案对我没有用(原因不明)。但是我发现这个组合在正常模式下输入时会显示完整路径:
按下1,然后再按CtrlG
来源:“获取当前文件名”Vim技巧Wiki。另请参阅:help CTRL-G
中的{count}CTRL-G
部分。
:!
)。你的 {count}CTRL-G
序列用于在用户界面中显示完整路径。 - Stefan Majewsky添加:p
,例如:
:!mycommand %:p
而%:p:h
将会给你文件所在目录的路径。
打印当前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
resolve()
)并扩展(expand()
)为当前脚本的绝对路径<sfile>:p
(而不是%:p
),然后exec
执行fnameescape
处理过的文件名,该文件名包含在一个函数局部的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")
注:
:help fnamemodify
%:p
(缓冲区文件)/ <sfile>:p
(脚本文件)expand('<sfile>')
在函数内部不起作用l:varname
不起作用;因此使用 exec
- 字符串连接 - 和 fnameescape
:messages
显示最近的200个vim [错误,]消息参考资料
如果你想在你的 vimrc
中使用完整路径,你可以使用类似以下的代码:
let vimFiles = '$HOME/.vim'
let absPath = expand(vimFiles . '/subDir')
这将为您提供在Windows上带有反斜杠的路径。