Wie kann ich .vimrc aus einer externen Datei lesen lassen?

24

Ich möchte meine ändern .vimrc, um den Wert einer Variablen aus einer externen Datei zu lesen. Wie kann ich das machen?

Insbesondere teilen ein Freund und ich ein Git-Repo mit unseren .vimDateien, aber es gibt ein paar kleine Unterschiede in dem, was wir in unseren Konfigurationen wollen. Der größte Teil der Datei ist also normal, aber wir verwenden if-Anweisungen, um zu bestimmen, ob benutzerspezifische Abschnitte geladen werden sollen.

let whoami = "user2"
if whoami == "user1"
...

Nachdem .vimrcwir unsere gemeinsame Version außerhalb der Quellcodeverwaltung überprüft haben, müssen wir jeweils die let whoamiZuordnung ändern, damit unser eigener Abschnitt geladen wird. Stattdessen möchte ich eine separate Datei führen, die für jeden von uns unterschiedlich sein kann und aus der vim diesen Variablenwert lädt.

Vielleicht ist ein anderer Gesichtspunkt dazu: Liest vim automatisch alle Dateien in meinem .vimVerzeichnis? In diesem Fall könnten wir jeweils einen Symlink mit dem Namen username.vim einfügen und diesen mit einer externen Datei verknüpfen, die für jeden von uns unterschiedlich wäre.

Nathan Long
quelle

Antworten:

35

In Ihrer Haupt-VIMRC-Datei:

source otherVimScriptFilePath.vim

Dann fügen Sie einfach Ihre variable Anweisung in diese Datei ein:

" otherVimScriptFilePath.vim
let whoami = "user1"
Robert S. Ciaccio
quelle
2
Zu meiner Information: In meiner Situation war es hilfreich, let whoami = ""direkt vor der sourceZeile zu arbeiten. Wenn die externe Datei nicht geladen werden kann, ist die Variable vorhanden und ich erhalte die Fehlermeldung, die wir zuvor für die nicht gesetzte Variable eingerichtet hatten.
Nathan Long
2
@ GorillaSandwich: Ich benutze dies, um mein vimrc auf meinem Windows-Rechner zu beziehen, da Windows keine symbolischen Links hat. Ich habe einen SVN-Ordner, der diese und alle meine anderen Punktedateien enthält. Ich habe also nur einen _vimrc, der den echten im svn-Ordner findet.
Robert S Ciaccio
@ GorillaSandwich: siehe meine Antwort für den silent! sourceTeil
Akira
6

Mit einem Versuch / Fang

Seitdem ich diese Frage gestellt habe, habe ich mir einen anderen Anwendungsfall zum Laden einer externen Datei ausgedacht: maschinenspezifische Optimierungen.

Da ich auf einem bestimmten Computer möglicherweise Optimierungen vornehmen muss oder nicht, verwende ich a try/catch, um die externe Datei zu laden. Wenn es keine solche Datei gibt, lasse ich sie unbemerkt fehlschlagen.

" If there are any machine-specific tweaks for Vim, load them from the following file.
try 
  source ~/.vimrc_machine_specific
catch
  " No such file? No problem; just ignore it.
endtry 
Nathan Long
quelle
5

Zur Beantwortung der letzten Frage werden die Dateien in ~/.vimnicht automatisch geladen, sondern alle Dateien in ~/.vim/plugin.

Heptit
quelle
2
und einige andere Orte unter ~ / .vim ( after, autoload)
akira
4

Sie können Ihre ~ / .vimrc mit dem :sourceBefehl eine andere Datei laden lassen . Sie könnten beispielsweise jeweils Ihre eindeutigen Befehle in ~ / .myvimrc einfügen und diese Befehle mit laden

source ~/.myvimrc

Oder Sie könnten, wie Sie dachten, Ihren Namen wie folgt in diese Datei einfügen:

let user = "user1"

und füge dies dann in deine ~ / .vimrc ein:

source ~/.myvimrc
if user == "user1"
    " do this
elseif user == "user2"
    " do that
else
    echo "Invalid user"
endif

Anstatt in Dateien Ihre Namen setzen, obwohl, können Sie $ USER als Akira vorgeschlagen oder Satz verwenden userVerwendung whoami, wie folgt aus :

let user = substitute(system('whoami'), '\n', '', '')

Die Funktion substitute () wird benötigt, da die Ausgabe von system () normalerweise ein '\ n' am Ende hat.

garyjohn
quelle
whoamifunktioniert nicht unter Windows
Akira
@akira: Stimmt, aber GorillaSandwich verwendet Unix, nicht Windows. $ USER funktioniert auch nicht mit Windows, zumindest nicht mit Windows XP.
Garyjohn
Ich sage nur, unter Windows ist es $ USERNAME. Der Hauptpunkt ist: Löst whoamieinen neuen Prozess aus. Wenn Sie Ihren Editor öffnen, sollte dieser schnell und nicht (unnötig) mehrmals ausgeführt werden.
Akira
2

Der Name des angemeldeten Benutzers ist in der Umgebungsvariablen $ USER verfügbar. Sie können leicht auf diese Variable zugreifen:

:echo $USER

Also, benutze einfach

execute "silent! source vimrc." . $USER

in Ihrem vimrc und legen Sie Ihre benutzerspezifischen Einstellungen in

vimrc.joe

oder wie auch immer Ihr Login-Name lautet

Akira
quelle
0

Ich bin nicht sicher, wie Ihr vimrc aussieht, daher ist dies möglicherweise nicht realisierbar. Wenn Sie und Ihr Freund jedoch große Teile gemeinsam haben, möchten Sie diese möglicherweise in separate Plugins aufteilen. Sie können dem ~/.vim/pluginVerzeichnis Dateien hinzufügen , damit diese beim Start geladen werden. (Sie werden in alphabetischer Reihenfolge geladen - :scriptnameszum Überprüfen verwenden.)

Auf diese Weise kann jeder Benutzer einen vimrc haben, der völlig einzigartig ist, aber alle Ihre allgemeinen Konfigurationen sind in Plugins enthalten. Wenn Sie sie logisch aufteilen, können Sie sie auch problemlos mit anderen teilen.

idbrii
quelle