Ich kann verwenden vim -u filename
zu verwenden , filename
anstatt mein Standard .vimrc
. Ich verwende diese Methode, wenn ich zwischen Benutzerkontexten ( su
) wechsle , um my zu verwenden .vimrc
, obwohl ich als Superuser ausgeführt werde.
Wie kann ich dasselbe auch für den Ordner erreichen, der standardmäßig ~/.vim
so eingestellt ist , dass ich Vim von der Befehlszeile auf einen alternativen Ordner verweisen kann ?
Was ich erreichen will
Okay, nimm user joe
( HOME=/home/joe
) und user root
( HOME=/root
) an. Der Benutzer joe
verfügt über einen Alias-Satz, vim
der wie folgt aussieht (der ursprünglich mithilfe der $HOME
Variablen festgelegt wurde, um diese Dynamik zu erzielen):
alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
Dann joe
tut der Benutzer etwas in der Art von sudo su -
(aber mit zusätzlicher Magie), was dazu führt, dass die .bashrc
und andere Leckereien /home/joe
geladen werden müssen root
. Der Benutzer root
hat jetzt genau den gleichen Alias vim
wie oben angegeben.
Das Problem ist, dass dies .vimrc
auf verschiedenen Systemen und in verschiedenen Szenarien verwendet wird. Häufig wird Joes Konto aufgerufen joe
, aber manchmal ist es etwas wie local.joe
oder was auch immer, was zu einem anderen Wert für führt $HOME
. Es ~/.vim
scheint also keine gute Idee zu sein, einen absoluten Pfad zum Ordner zu programmieren. In unserem obigen Szenario hat der Benutzer root
jedoch keinen Ordner /root/.vim
, der jedoch standardmäßig über loaded .vimrc
( /home/joe/.vimrc
) vorhanden sein soll.
Was ich - vorzugsweise auf der Kommandozeile - erreichen möchte, ist, Vim dazu zu bringen, Plugins usw. von unten zu verwenden, /home/joe/.vim
wenn es gestartet wird als root
(vorausgesetzt, das alias
ist wie gezeigt eingestellt - andere Fälle können ignoriert werden). Wenn es eine dynamische Methode über VimScript gibt, geben Sie bitte Zeiger an. Aber die Verwendung von Variablen, wie $HOME
sie zu einem Haken 22 führen würden, denke ich.
quelle
ln
. wie 'mv ~ / .vim ~ / .vim-whatever && ln -s ~ / .vim-whatever ~ / .vim` dann mache dasselbe für.vimrc
. wickeln Sie das alles mit ein paar Bash-Alias ab, damit Sie leicht die eine oder andere Richtung wechseln könnenAntworten:
Vim sucht in ~ / .vim, weil sich dieses Verzeichnis in der Standardliste in 'runtimepath' befindet, abgekürzt als 'rtp'. Um Vim anzuweisen, woanders zu suchen, müssen Sie einen anderen 'rtp'-Wert vollständig angeben oder den Standardwert bearbeiten, indem Sie beispielsweise einen Aufruf von substitute () verwenden. Wenn Sie möchten, dass Vim zuerst an einer anderen Stelle nach Ihren Konfigurationsdateien sucht, ist es egal, dass es auch in ~ / .vim und in Ihrem alternativen after-Verzeichnis, dem Befehl, sucht ist ziemlich einfach:
Sehen
Das Ersetzen von .vim durch Ihr alternatives Verzeichnis erfordert etwas mehr Eingabe.
Ich habe versucht,
~/.vim
durch einen anderen Pfad zu ersetzen , aber ich konnte nicht mit dem übereinstimmen~
, also ging ich voran und gab bekannt, was ich hatte.Bearbeiten
Der Grund , warum ich konnte das nicht überein
~
von ‚rtp‘ im Wert besteht darin , dass , wenn der Wert als Wert erhalten wird ,&rtp
anstatt die Ausgabe von:set rtp?
, die~
auf den Namen vollständigen Pfades erweitert werden von Home - Verzeichnis des Benutzers. Es ist kein~
Ergebnis vorhanden.Folgendes funktioniert.
quelle
\\~
erledigt es den Job. Eine Flucht für Bash, nehme ich an? Auf jeden Fall funktioniert dies immer noch nicht, da sich die Art und Weise, wie VimScript mit VimScript umgeht, ändert~
.:set rtp?
Shows „~ / .vim“ , aber das:echo &rtp
dehnt sich~
auf den vollständigen Pfadnamen. Folgendes scheint zu funktionieren: `vim --cmd 'let & rtp = substitute (& rtp, $ HOME." / \. Vim "," alternate "," g ")'. Ich werde meine Antwort aktualisieren.In der von Ihnen ausgewählten .vimrc können Sie den Laufzeitpfad angeben:
Wenn Sie Ihre Person verwenden, können
.vimrc
Sie dies auf Ihr persönliches.vim
Verzeichnis einstellen und es sollte sowohl als auchsu
als Ihr normales Konto funktionieren .quelle
$HOME
damals in meinem eigenen Konto verwenden würde, würde es sich auflösen,/home/joe
aber als root immer noch/root
... damit nichts gewonnen wird. Dies.vimrc
soll plattform- und vimübergreifend funktionieren, und das Festlegen eines absoluten Pfades macht das völlig unmöglich. Vielen Dank, dass Sie sich die Zeit genommen haben zu antworten..bashrc
Sie in den Benutzern eine Variable setzen,$REALHOME
die von der ausgenommen ist,sudo
reset_env
und diese dann als Grundlage verwenden fürrtp
?alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'