Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 展开包含文件的相对路径wrt_Vim - Fatal编程技术网

Vim 展开包含文件的相对路径wrt

Vim 展开包含文件的相对路径wrt,vim,Vim,我正在用Vimscript读取一个配置文件,foo.yml。此文件包含一个参数,该参数是目录的相对路径。此路径相对于foo.yml文件,而不是我当前的工作目录 我需要把这个相对路径扩展到一个绝对路径 我尝试过使用fnamemodify(path,:p')和expand(path),但运气不好。我认为这些函数看起来很混乱,因为从当前的工作目录来看,相对路径是无效的。因此,它保持路径不变 有没有办法让Vim在解析相对路径时使用foo.yml作为参考点?或者任何其他可以做同样事情的功能 感谢您的帮助。

我正在用Vimscript读取一个配置文件,
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中使用它也是一个很好的提示