Я могу использовать , vim -u filename
чтобы использовать filename
вместо моего по умолчанию .vimrc
. Я использую этот метод при переключении пользователя contextx ( su
), чтобы использовать мой .vimrc
даже при работе в качестве суперпользователя.
Как я могу достичь того же также для папки , в которой по умолчанию является ~/.vim
таким , что я могу указать Vim из командной строки в другую папку?
Чего я хочу достичь
Хорошо, предположим, user joe
( HOME=/home/joe
) и user 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.
источник
ln
. например, 'mv ~ / .vim ~ / .vim-what & & ln -s ~ / .vim-what ~ / .vim`, сделайте то же самое для.vimrc
. оберните все это некоторым псевдонимом bash, чтобы вы могли легко переключаться в одну или другую сторонуОтветы:
Vim ищет в ~ / .vim, потому что этот каталог находится в списке по умолчанию в runtimepath, сокращенно как rtp. Чтобы заставить Vim искать в другом месте, вам нужно будет полностью указать другое значение 'rtp' или отредактировать значение по умолчанию, используя, например, вызов substitute (). Если вы просто хотите, чтобы Vim сначала искал файлы конфигурации в другом месте, не обращайте внимания на то, что он также выглядит в ~ / .vim, и не обращайте внимания на то, что он не смотрит в ваш альтернативный каталог, введите команду довольно просто:
Видеть
Замена .vim альтернативным каталогом требует немного больше времени.
Я попытался заменить
~/.vim
другим путем, но я не мог соответствовать~
, поэтому я пошел дальше и опубликовал то, что у меня было.редактировать
Причина, по которой я не смог сопоставить
~
значение в 'rtp', заключается в том, что когда значение получается как значение,&rtp
а не как результат:set rtp?
, значение~
расширяется до полного пути к домашнему каталогу пользователя. Нет~
в результате.Следующие работы.
источник
\\~
делает свою работу. Один спасение для Баша? Во всяком случае, это все еще не работает, потому что что-то другое в том, как VimScript обрабатывает~
.:set rtp?
показывает «~ / .vim», но:echo &rtp
расширяется~
до полного имени пути. Кажется, работает следующее: `vim --cmd 'let & rtp = substitute (& rtp, $ HOME." / \. Vim "," alternate "," g ")'. Я обновлю свой ответ.В выбранном вами .vimrc вы можете указать путь выполнения:
Если вы используете своего человека,
.vimrc
то вы можете установить его в свой личный.vim
каталог, и он должен работать как сsu
обычной учетной записью.источник
$HOME
в своем собственном аккаунте, он бы разрешил,/home/joe
но как root все равно/root
... так что ничего не выиграно. Это.vimrc
должно работать на разных платформах и в версиях Vim, и установка абсолютного пути полностью нарушает это. Спасибо, что нашли время, чтобы ответить, хотя..bashrc
, вы могли бы установить переменную, скажем$REALHOME
, которая освобождается от,sudo
reset_env
а затем использовать это в качестве основы дляrtp
?alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'