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?

Antworten:


8

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


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

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.


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.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.