Umgebungsvariable für persönlichen Laufzeitpfad? (~ / .vim auf * nix, ~ / vimfiles auf win32)

9

Ich versuche, meine .viminfoDatei in meinen .vim/Ordner zu verschieben, um die Synchronisierung auf mehreren Computern zu vereinfachen. (Ich habe meine .vimauf Dropbox gespeichert und erstelle dann aus meinem Home-Verzeichnis Symlinks dazu.)

Also habe ich heute Morgen diese Antwort gefunden , wie man genau das macht. Großartig! Leider benutze ich Windows bei der Arbeit und Mac zu Hause, so ~/.vimist es eigentlich manchmal ~/vimfiles. Als Ergebnis eine einzeilige Lösung

set viminfo+=n~/.vim/viminfo

ist jetzt eine 5-Zeilen-Lösung geworden

if has('unix')
  set viminfo+=n~/.vim/viminfo
elseif has('win32')
  set viminfo+=n~/vimfiles/viminfo
endif

das fühlt sich für mich einfach ungeschickt an.

Gibt es eine Standardumgebungsvariable, mit der ich auf den benutzerspezifischen Laufzeitpfad zugreifen kann, à la $VIMRUNTIMEoder $MYVIMRC? Oder muss ich nur herumtanzen?

Ryan Lue
quelle

Antworten:

8

Dies sollte funktionieren und ist plattform- / pluginunabhängig: fnamemodify(expand("$MYVIMRC"), ":p:h")

Mohn
quelle
Ihr Leute seid Genies.
Ryan Lue
5

Angenommen, Sie haben es nicht geändert, ist das erste Element in &runtimepathstandardmäßig Ihr Laufzeitverzeichnis:

$HOME/.vim        on unix-like systems
$HOME\vimfiles    on windows

Mit diesem Wert können Sie Vim mitteilen, wo Ihre viminfoDatei mit diesem plattformunabhängigen Einzeiler abgelegt werden soll:

let &viminfo .= ',n' . split(&rtp, ',')[0] . '/viminfo'

Ressourcen:

:h :let-option
:h split()
:h runtimepath
romainl
quelle
Leider ist das nicht wahr. &runtimepathWird von Plugin-Managern manipuliert, gibt es absolut keinen Grund, mit $HOME/.vimoder mit zu beginnen $HOME\vimfiles.
lcd047
@ lcd047 beginnt im Standardzustand &runtimepathimmer mit dem Standard-Laufzeitverzeichnis auf Benutzerebene für die aktuelle Plattform. Jetzt ist es offensichtlich möglich, dass der Benutzer seine 'rtp'Unkenntlichkeit schlachtet, aber AFAIK-Erreger, Vundle, Plug, VAM und Neobundle verlassen alle~/.vim (oder ähnliche) am Anfang.
Romainl
Nur mit der Standardkonfiguration. Lange Zeit habe ich Folgendes verwendet: pathogen#infect("$VIM/local/bundle/{}")Um (1) Bundles für alle Benutzer verfügbar zu machen, (2) sie von der Hauptlaufzeit von Vim getrennt zu halten und (3) sie automatisch zu aktualisieren. ~/.vimlandet mit diesem Setup in der Mitte des Bündels.
lcd047
@ lcd047, ich habe den Wortlaut des ersten Satzes gemäß unserem Gespräch geändert.
Romainl
Hat es für mich getan und scheint mir angesichts meines Setups die eleganteste Lösung zu sein. Vielen Dank!!
Ryan Lue
2

Der erste Fehler, den ich in Bezug auf Windows immer wieder sehe, ist immer der Versuch, das Problem mit zu lösen $HOME, nicht wahr?

Die Verwendung $HOMEführt möglicherweise zu Problemen, insbesondere wenn Sie Unix-ähnliche Umgebungen verwenden (Cygwin, Git Bash usw.). Verwenden Sie es nicht in Skripten, sondern legen Sie es nicht als Umgebungsvariable fest. Tatsächlich führt die Einstellung $HOMEdazu, dass Cygwin nicht mehr richtig funktioniert und git bash ähnliche Aktionen ausführt. Je mehr Sie spielen, desto $HOMEschlimmer werden die Fehler, und es wird schwieriger, sie aufzuspüren. Benutze es einfach nicht.

Windows baut das $HOMEon the fly und hinter den Kulissen mit %HOMEDRIVE%%HOMEPATH%. Verwenden Sie dies einfach in Ihrem _vimrcoder vimrc(ohne Punkt):

set viminfo+=n%HOMEDRIVE%/%HOMEPATH%/vimfiles/viminfo

Dies sollte das Problem lösen. Wenn Sie geändert haben vimfiles, .vimum entsprechend anzupassen.

user1640896
quelle
0

Ich habe den viminfo-Ordner von Windows in .vim umbenannt (oder den Inhalt des ersteren in den letzteren kopiert und dann den ersteren gelöscht) und sie dann mit verknüpft mklink /d viminfo .vim. (Beachten Sie, dass mklink seine Argumente in der entgegengesetzten Reihenfolge vom Unix 'ln-Befehl übernimmt.)

Edward
quelle