Answers:
:!mycommand %:p
有关:
:!cd %:p:h
:help filename-modifiers
:%p
是文件的绝对路径,而不是相对路径。:%p%h
是文件父目录的绝对路径。使用just %:h
可以产生相对路径。
cd ~ ; vim .vimrc
,Vim :,:!echo %:h
应该显示'。' 相对路径。
其他两个答案对我不起作用(由于某种原因)。但是,我发现在“普通”模式下键入此组合时,它将显示完整路径:
1然后按CtrlG
来源:Vim Tips Wiki上的“ 获取当前文件的名称 ”。另请参阅的{count}CTRL-G
部分:help CTRL-G
。
:!
)。您的{count}CTRL-G
序列用于在UI中显示完整路径。
要输出当前的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变量中包含source
的fnameescape
-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")
笔记:
:help fnamemodify
%:p
缓冲文件)/ <sfile>:p
(脚本文件)expand('<sfile>')
在函数内不起作用l:varname
无效;因此,exec
-字符串串联-和fnameescape
:messages
打印最新的200 vim [错误,]消息参考资料
获取当前文件的名称 http://vim.wikia.com/wiki/Get_the_name_of_the_current_file
Set_working_directory_to_the_current_file http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file
如果您要在中使用完整路径vimrc
,则可以使用以下方法:
let vimFiles = '$HOME/.vim'
let absPath = expand(vimFiles . '/subDir')
这将为您提供Windows上带有反斜杠的路径。