如何扩展当前文件的完整路径以传递给Vim中的命令?
当我进入命令模式并键入如何扩展当前文件的完整路径以传递给Vim中的命令?,vim,Vim,当我进入命令模式并键入 :!mycommand % 我在当前文件上执行命令(%扩展为当前文件名)。 是否有类似的结构扩展完整文件名(使用完整路径) 我正在使用Windows。附加:p,例如 :!mycommand %:p 和%:p:h将为您提供文件所在目录的路径。:!mycommand%:p 相关的: :!cd%:p:h其他两个答案对我不起作用(出于某种原因)。但是,我发现在正常模式下键入时,此组合显示完整路径: 按1,然后按CtrlG 来源:Vim Tips Wiki上的“”。另请参见的{
:!mycommand %
我在当前文件上执行命令(%
扩展为当前文件名)。
是否有类似的结构扩展完整文件名(使用完整路径)
我正在使用Windows。附加
:p
,例如
:!mycommand %:p
和
%:p:h
将为您提供文件所在目录的路径。:!mycommand%:p
相关的:
:!cd%:p:h
其他两个答案对我不起作用(出于某种原因)。但是,我发现在正常模式下键入时,此组合显示完整路径:
按1,然后按CtrlG
来源:Vim Tips Wiki上的“”。另请参见的
{count}CTRL-G
部分。如果您想在vimrc
中使用完整路径,可以使用如下内容:
let vimFiles = '$HOME/.vim'
let absPath = expand(vimFiles . '/subDir')
这将为您提供一个在Windows上带有反斜杠的路径。获取当前文件的名称 将工作目录设置为当前文件
要打印当前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
注:
:帮助fnamemodify
- “当前文件”:
(缓冲文件)/%:p
(脚本文件):p
打印最近的200条vim[错误]消息:消息
:help filename modifiers
要获取包含当前文件的目录,我认为%:h就足够了。为什么这里需要%:p:h?@HVNSweeting:%p
是文件的绝对路径,而不是相对路径<代码>:%p%h是文件父目录的绝对路径。仅使用%:h
可以产生一个相对路径。@HVNSweeting Shell:cd~;vim.vimrc
,vim::!echo%:h
,相对路径应显示“.”。这是另一个主题。问题是在命令字符串中包含缓冲区路径(因此前导的:!
)。您的{count}CTRL-G
序列用于在UI中显示完整路径。@StefanMajewsky关于实际上将我带到这里的问题标题,这应该是选择的答案。
" 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")