如何在vim中将符号链接扩展为文件名的完整路径?

16
我正在使用 Mac 和 MacVim 7.3。
我有一个符号链接 〜/some/symlink,它指向实际文件 〜/some/actual_file。
当我运行“vim〜/some/symlink”时,它在 vim 中打开该文件,并将 vim 状态栏中的名称设置为 〜/some/symlink,这很合理。
如何从 vim 中获取“实际”文件 〜/some/actual_file 的完整路径? 我希望 vim 状态栏显示 ~/some/actual_file 而不是 ~/some/symlink。
我期望根据 resolve() 的帮助描述(粘贴如下),该 vim 函数可以工作,但 resolve("~/some/symlink") 返回 ~/some/symlink,所以没什么帮助。
我漏掉了什么?谢谢!
resolve({filename})                 *resolve()* *E655*
        On MS-Windows, when {filename} is a shortcut (a .lnk file),
        returns the path the shortcut points to in a simplified form.
        On Unix, repeat resolving symbolic links in all path
        components of {filename} and return the simplified result.
        To cope with link cycles, resolving of symbolic links is
        stopped after 100 iterations.
        On other systems, return the simplified {filename}.

使用vim,您可以使用system("cmd")执行命令并获取输出。通过这种方式,您可以调用"readlink -m"来获取真实路径。 - Lynch
1个回答

33

你的问题是"~",这不是文件名的一部分,而是你家目录的简写。你可以使用expand()然后 resolve()。例如:

:echo resolve(expand("~/some/symlink"))

expand() 还会展开环境变量,例如: $HOME, $VIMRUNTIME


4
如果您不希望expand()扩展环境变量并进行通配符匹配,请使用fnamemodify('~/some/symlink', ':p') - ZyX
为了获取当前文件的完整路径,请将“%”替换为“〜/some/symlink”。将其绑定到一个领导键组合,以便在您忘记正在编辑哪个文件时方便使用... (-_-) - joelostblom
甚至更好的是,使用%:p来始终获取完整路径。 - joelostblom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接