如何在Vim/Neovim中获取文件相对于指定目录的相对路径
获取文件相对于指定目录的相对路径(Neovim 方案)
方法一:Neovim 0.9+ 原生函数(推荐)
Neovim 0.9及以上版本提供了专门的vim.fs.relative()函数,能直接处理任意路径的相对计算:
let relative_path = vim.fs.relative(f, d)
- 该函数会自动识别
f是绝对路径还是相对路径,只要f确实位于d目录下,就能返回正确的相对路径。
方法二:兼容旧版 Neovim 的字符串处理方案
如果你的Neovim版本低于0.9,可以先将两个路径转为绝对路径,再通过正则替换得到相对路径:
" 把f和d都转换成绝对路径(确保路径统一) let abs_f = fnamemodify(f, ':p') let abs_d = fnamemodify(d, ':p') " 移除d的绝对路径前缀,得到相对路径 let relative_path = substitute(abs_f, '^' . escape(abs_d, '\'), '', '')
escape(abs_d, '\')用于转义路径中的特殊字符,避免正则匹配失效。
方法三:调用系统命令(跨平台/兼容更多场景)
也可以借助系统工具来计算,比如:
Linux/macOS 用 realpath 命令
let relative_path = systemlist('realpath --relative-to=' . shellescape(d) . ' ' . shellescape(f))[0]
跨平台用 Python
let relative_path = systemlist('python -c "import os; print(os.path.relpath(\'' . escape(f, '\') . '\', \'' . escape(d, '\') . '\'))"')[0]
shellescape和escape用来处理路径中的空格、特殊字符,防止命令执行出错。
内容的提问来源于stack exchange,提问作者Thayne
相关产品推荐
相关产品推荐

