You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:37:04