Vim 展开包含文件的相对路径wrt
我正在用Vimscript读取一个配置文件,Vim 展开包含文件的相对路径wrt,vim,Vim,我正在用Vimscript读取一个配置文件,foo.yml。此文件包含一个参数,该参数是目录的相对路径。此路径相对于foo.yml文件,而不是我当前的工作目录 我需要把这个相对路径扩展到一个绝对路径 我尝试过使用fnamemodify(path,:p')和expand(path),但运气不好。我认为这些函数看起来很混乱,因为从当前的工作目录来看,相对路径是无效的。因此,它保持路径不变 有没有办法让Vim在解析相对路径时使用foo.yml作为参考点?或者任何其他可以做同样事情的功能 感谢您的帮助。
foo.yml
。此文件包含一个参数,该参数是目录的相对路径。此路径
相对于foo.yml
文件,而不是我当前的工作目录
我需要把这个相对路径扩展到一个绝对路径
我尝试过使用fnamemodify(path,:p')
和expand(path)
,但运气不好。我认为这些函数看起来很混乱,因为从当前的工作目录来看,相对路径是无效的。因此,它保持路径不变
有没有办法让Vim在解析相对路径时使用foo.yml
作为参考点?或者任何其他可以做同样事情的功能
感谢您的帮助。为了相对于文件目录展开,最简单的方法是将
:cd
临时放入该目录。下面是一些为当前文件执行此操作的示例代码(%
);您必须对其进行调整,以使用已传递的文件规范
if expand('%:h') !=# '.'
" Need to change into the file's directory first to get glob results
" relative to the file.
let l:save_cwd = getcwd()
let l:chdirCommand = (haslocaldir() ? 'lchdir!' : 'chdir!')
execute l:chdirCommand '%:p:h'
endif
try
" Get the full path to a:filespec, relative to the current file's directory.
let l:absoluteFilespec = fnamemodify(a:filespec, ':p')
finally
if exists('l:save_cwd')
execute l:chdirCommand fnameescape(l:save_cwd)
endif
endtry
为了相对于文件目录展开,最简单的方法是将
:cd
临时放入该目录。下面是一些为当前文件执行此操作的示例代码(%
);您必须对其进行调整,以使用已传递的文件规范
if expand('%:h') !=# '.'
" Need to change into the file's directory first to get glob results
" relative to the file.
let l:save_cwd = getcwd()
let l:chdirCommand = (haslocaldir() ? 'lchdir!' : 'chdir!')
execute l:chdirCommand '%:p:h'
endif
try
" Get the full path to a:filespec, relative to the current file's directory.
let l:absoluteFilespec = fnamemodify(a:filespec, ':p')
finally
if exists('l:save_cwd')
execute l:chdirCommand fnameescape(l:save_cwd)
endif
endtry
为了相对于文件目录展开,最简单的方法是将
:cd
临时放入该目录。下面是一些为当前文件执行此操作的示例代码(%
);您必须对其进行调整,以使用已传递的文件规范
if expand('%:h') !=# '.'
" Need to change into the file's directory first to get glob results
" relative to the file.
let l:save_cwd = getcwd()
let l:chdirCommand = (haslocaldir() ? 'lchdir!' : 'chdir!')
execute l:chdirCommand '%:p:h'
endif
try
" Get the full path to a:filespec, relative to the current file's directory.
let l:absoluteFilespec = fnamemodify(a:filespec, ':p')
finally
if exists('l:save_cwd')
execute l:chdirCommand fnameescape(l:save_cwd)
endif
endtry
为了相对于文件目录展开,最简单的方法是将
:cd
临时放入该目录。下面是一些为当前文件执行此操作的示例代码(%
);您必须对其进行调整,以使用已传递的文件规范
if expand('%:h') !=# '.'
" Need to change into the file's directory first to get glob results
" relative to the file.
let l:save_cwd = getcwd()
let l:chdirCommand = (haslocaldir() ? 'lchdir!' : 'chdir!')
execute l:chdirCommand '%:p:h'
endif
try
" Get the full path to a:filespec, relative to the current file's directory.
let l:absoluteFilespec = fnamemodify(a:filespec, ':p')
finally
if exists('l:save_cwd')
execute l:chdirCommand fnameescape(l:save_cwd)
endif
endtry
怎么样
:let dir = expand('%:p:h')
:let absolute_path = dir . '/' . path
如果你想让它也在Windows上工作,你就必须更加努力
:help expand()
:help filename-modifiers
:help file-functions
怎么样
:let dir = expand('%:p:h')
:let absolute_path = dir . '/' . path
如果你想让它也在Windows上工作,你就必须更加努力
:help expand()
:help filename-modifiers
:help file-functions
怎么样
:let dir = expand('%:p:h')
:let absolute_path = dir . '/' . path
如果你想让它也在Windows上工作,你就必须更加努力
:help expand()
:help filename-modifiers
:help file-functions
怎么样
:let dir = expand('%:p:h')
:let absolute_path = dir . '/' . path
如果你想让它也在Windows上工作,你就必须更加努力
:help expand()
:help filename-modifiers
:help file-functions
很好的尝试,但如果
路径
可能与它的子项相关,则不起作用。请澄清,或给出一个示例。在我看来,我已经回答了这个问题,但我想我遗漏了什么。“我正在读取一个配置文件foo.yml…此路径是相对于foo.yml文件的。”是否展开('%:p:h')
没有给出foo.yml的目录,或者这不是您所说的“相对于foo.yml文件”?您的答案很好。但是如果路径是相对的,比如说a/b/c/d
wrt到foo.yml
所在的目录,那么它就不起作用。无论如何,谢谢你的帮助,但是我已经用lcd
包装了代码,并按照@Ingo的建议进行了恢复。我仍然没有看到示例。如果foo.xml在目录/x/y/z/中,路径是a/b/c/d,那么我的绝对路径将显示为/x/y/z/a/b/c/d。这不是你想要的吗?很好的尝试,但是如果路径
可能与它的子项相关,则不起作用。请澄清,或给出一个示例。在我看来,我已经回答了这个问题,但我想我遗漏了什么。“我正在读取一个配置文件foo.yml…此路径是相对于foo.yml文件的。”是否展开('%:p:h')
没有给出foo.yml的目录,或者这不是您所说的“相对于foo.yml文件”?您的答案很好。但是如果路径是相对的,比如说a/b/c/d
wrt到foo.yml
所在的目录,那么它就不起作用。无论如何,谢谢你的帮助,但是我已经用lcd
包装了代码,并按照@Ingo的建议进行了恢复。我仍然没有看到示例。如果foo.xml在目录/x/y/z/中,路径是a/b/c/d,那么我的绝对路径将显示为/x/y/z/a/b/c/d。这不是你想要的吗?很好的尝试,但是如果路径
可能与它的子项相关,则不起作用。请澄清,或给出一个示例。在我看来,我已经回答了这个问题,但我想我遗漏了什么。“我正在读取一个配置文件foo.yml…此路径是相对于foo.yml文件的。”是否展开('%:p:h')
没有给出foo.yml的目录,或者这不是您所说的“相对于foo.yml文件”?您的答案很好。但是如果路径是相对的,比如说a/b/c/d
wrt到foo.yml
所在的目录,那么它就不起作用。无论如何,谢谢你的帮助,但是我已经用lcd
包装了代码,并按照@Ingo的建议进行了恢复。我仍然没有看到示例。如果foo.xml在目录/x/y/z/中,路径是a/b/c/d,那么我的绝对路径将显示为/x/y/z/a/b/c/d。这不是你想要的吗?很好的尝试,但是如果路径
可能与它的子项相关,则不起作用。请澄清,或给出一个示例。在我看来,我已经回答了这个问题,但我想我遗漏了什么。“我正在读取一个配置文件foo.yml…此路径是相对于foo.yml文件的。”是否展开('%:p:h')
没有给出foo.yml的目录,或者这不是您所说的“相对于foo.yml文件”?您的答案很好。但是如果路径是相对的,比如说a/b/c/d
wrt到foo.yml
所在的目录,那么它就不起作用。无论如何,谢谢你的帮助,但是我已经用lcd
包装了代码,并按照@Ingo的建议进行了恢复。我仍然没有看到示例。如果foo.xml在目录/x/y/z/中,路径是a/b/c/d,那么我的绝对路径将显示为/x/y/z/a/b/c/d。这不是你想要的吗?回答得好!这就完成了工作。在try-catch中使用它也是一个很好的提示。回答得好!这就完成了工作。在try-catch中使用它也是一个很好的提示。回答得好!这就完成了工作。在try-catch.Goo中使用它也是一个很好的提示