Vim 将文件路径重新映射到不同的目录

Vim Remap File Paths To Different Directory

背景

我正在尝试 运行 Neovim 在 Docker 容器中。

我 运行 遇到的一个问题是容器中文件的路径与主机文件系统中的文件路径不同。

示例:

如果我想使用传递路径 Vim 的容器编辑 /etc/passwd/etc/password 将编辑容器中的文件,而不是主机上的文件。相反,我将不得不通过 /host-shared-dir/etc/passwd 和 运行 之类的容器 docker run -v /:/host-shared-dir ....

问题

如何重新映射 Vim 中的所有路径以将另一个目录视为根目录。

示例:

如果我将路径 /etc/passwd 传递给 Vim,我怎样才能让 Vim 真正打开文件 /host-shared-dir/etc/passwd

在特权中启动容器并挂载主机卷“/”

docker container run -t -d --privileged -v "/":"/host/" ubuntu

进入容器

docker container exec -it <container id> bash

然后 chroot 到主机

chroot host

我们现在可以访问具有相同主机路径的所有系统文件。

您可以使用 :autocmd 将任何新打开的缓冲区 (:help BufRead) 重定向到以您的根为前缀的文件系统路径:

autocmd BufRead * execute 'edit' fnameescape('/host-shared-dir' . expand('%:p'))

请注意,这只是一个简单的演示;你可能想清理现有的原始缓冲区,只对某些路径执行此操作,处理文件类型检测等。要获得更完整的实现,你可以查看 file-line plugin;它实现了类似的东西。