Пути к файлам Vim Remap в другой каталог - PullRequest
0 голосов
/ 11 декабря 2018

Фон

Я пытаюсь запустить Neovim в контейнере Docker.

Одна проблема, с которой я сталкиваюсь, заключается в том, что пути к файлам в контейнере отличаются от путей в файловой системе хоста.

Пример:

Если я хочу отредактировать /etc/passwd с контейнером Vim, передаваемым по пути /etc/password, то отредактирую файл в контейнере, а не файл на моем хосте.Вместо этого мне нужно было бы передать что-то вроде /host-shared-dir/etc/passwd и запустить контейнер с docker run -v /:/host-shared-dir ....

Вопрос

Как мне переназначить все пути в Vim для обработки другого каталога в качестве корневого.

Пример:

Если я передам Vim путь /etc/passwd, как я могу заставить Vim действительно открыть файл /host-shared-dir/etc/passwd?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы можете использовать :autocmd, чтобы перенаправить все вновь открытые буферы (:help BufRead) в путь файловой системы, к которому добавлен ваш корень:

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

Обратите внимание, что этопросто простая демонстрация;Вы, вероятно, хотите очистить существующий исходный буфер, делать это только для определенных путей, обрабатывать обнаружение типов файлов и т. д. Для более полной реализации вы можете посмотреть плагин строки файла ;он реализует нечто подобное.

0 голосов
/ 11 декабря 2018

Запустить контейнер в привилегированном и смонтировать том хоста "/"

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

Введите контейнер

docker container exec -it <container id> bash

Затем выполните chroot для хоста

chroot host

Теперь у нас естьдоступ ко всем системным файлам с одинаковыми путями к хосту.

...