14

Я могу использовать vim -u filename чтобы использовать filename вместо моего .vimrc умолчанию. Я использую этот метод при переключении пользовательских контекстов (su) на использование моего .vimrc даже если он работает как суперпользователь.

Как я могу добиться того же и для папки , в которой по умолчанию является ~/.vim , так что я могу указать Vim из командной строки в другую папку?


Чего я хочу достичь

Хорошо, предположим, что пользователь joe (HOME=/home/joe) и пользователь root (HOME=/root). У пользователя joe есть псевдоним для vim который выглядит следующим образом (но изначально был установлен с помощью переменной $HOME чтобы сделать это динамическим):

alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'

Затем пользователь joe делает что-то вроде sudo su - (но с добавленной магией), в результате чего .bashrc и другие полезности из /home/joe будут загружены для пользователя root . Пользователь root теперь имеет точно такой же псевдоним для vim как показано выше.

Проблема в том, что этот .vimrc используется в различных системах и в различных сценариях. Часто учетная запись Джо называется joe , но иногда это будет что-то вроде local.joe или чего-то еще, что приведет к другому значению $HOME . Поэтому жесткое кодирование абсолютного пути к папке ~/.vim не кажется хорошей идеей. Однако в нашем вышеупомянутом сценарии пользователь root не имеет папки /root/.vim которая, как ожидается, будет существовать по умолчанию через загруженный файл .vimrc (/home/joe/.vimrc).

Чего я хочу добиться - предпочтительно в командной строке - это заставить Vim использовать плагины и т.д. Из-под /home/joe/.vim при запуске от имени пользователя root (при условии, что alias установлен так, как показано - другие случаи можно игнорировать). Если есть какой-либо динамический метод через VimScript, пожалуйста, предоставьте указатели. Но использование таких переменных, как $HOME может привести к уловке 22, я думаю.

2 ответа2

8

Vim ищет в ~/.vim, потому что этот каталог находится в списке по умолчанию в runtimepath, сокращенно как rtp. Чтобы заставить Vim искать в другом месте, вам нужно будет полностью указать другое значение 'rtp' или отредактировать значение по умолчанию, используя, например, вызов substitute(). Если вы просто хотите, чтобы Vim сначала искал файлы конфигурации в другом месте, не обращайте внимания на то, что он также выглядит в ~/.vim, и не обращайте внимания на то, что он не смотрит в ваш альтернативный каталог, введите команду довольно просто:

vim --cmd 'set rtp^=alternate_dir'

Увидеть

:help --cmd
:help :set^=

Замена .vim альтернативным каталогом требует немного больше времени.

vim --cmd 'let &rtp = substitute(&rtp, "\.vim", "alternate", "g")'

Я попытался заменить ~/.vim другим путем, но я не смог сопоставить ~ , поэтому я решил опубликовать то, что у меня было.

редактировать

Причина, по которой я не смог сопоставить значение ~ в значении 'rtp', заключается в том, что когда значение получается как значение &rtp а не как результат :set rtp? ~ раскрывается до полного пути к домашнему каталогу пользователя. Там нет ~ в результате.

Следующие работы.

vim --cmd 'let &rtp = substitute(&rtp, $HOME."/\.vim", "alternate", "g")'
3

В выбранном вами .vimrc вы можете указать путь выполнения:

let &runtimepath=/path/to/specific/vim/folder

Если вы используете ваш личный файл .vimrc вы можете установить его в свой личный каталог .vim и он должен работать как su и как ваша обычная учетная запись.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .