Vim将文件路径重新映射到其他目录

时间:2018-12-11 17:34:21

标签: docker vim filesystems containers neovim

背景

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

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

示例:

如果我要通过在路径/etc/passwd中传递Vim​​容器来编辑/etc/password,则会编辑容器中的文件而不是主机上的文件。相反,我将必须传递类似/host-shared-dir/etc/passwd的内容,并使用docker run -v /:/host-shared-dir ...运行容器。

问题

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

示例:

如果我将路径/etc/passwd传递给Vim,如何使Vim实际打开文件/host-shared-dir/etc/passwd

2 个答案:

答案 0 :(得分:1)

您可以使用:autocmd将所有新打开的缓冲区(:help BufRead)重定向到以root开头的文件系统路径:

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

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

答案 1 :(得分:0)

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

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

输入容器

docker container exec -it <container id> bash

然后chroot托管

chroot host

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