$ PATH in Vim stimmt nicht mit Terminal überein

10

Ich verwende MacVim und wenn ich es nicht vom Terminal ( mvim) aus starte, enthält $ PATH nicht das, was ich in meinem .bash_profile festgelegt habe. Es scheint nur die Standardwerte zu haben /usr/bin:/bin:/usr/sbin:/sbin.

Ich verwende OS X 10.5.8. Selbst wenn ich es manuell in meiner .vimrc einstellen könnte, wäre das in Ordnung, obwohl ich es vorziehen würde, es vom selben Ort wie Terminal zu ziehen. Ich habe versucht, den Vorschlägen einer Website zu folgen let $PATH += /blah/foo:/bar/etc, ohne Erfolg.

Bearbeiten / Lösung: Siehe meine Antwort unten. MacVim hat eine Option, um dies zu beheben.

Krapfen
quelle
Ähnliche Frage hier
Brad Parks

Antworten:

12

MacVim scheint den $ PATH so zu erhalten, dass die benutzerdefinierten Punktedateien eines normalen Benutzers ignoriert werden.

Ich kann nicht sagen, warum sie es lieber so machen, aber es scheint wahr zu sein. In den Einstellungen (auf der Registerkarte "Erweitert") können Sie "Vim-Prozesse in einer Login-Shell starten" auswählen, dies verbessert sich jedoch nur $PATHgeringfügig für mich.

Das Beste, was ich sagen kann, verwendet MacVim /usr/libexec/path_helper- das wiederum die Elemente verwendet, die (1) in der /etc/pathsDatei und (2) alle zusätzlichen Elemente im /etc/paths.d/Verzeichnis gefunden haben. Alle Änderungen, die im Home-Verzeichnis eines Benutzers (über .profileoder dergleichen) vorgenommen werden, werden ignoriert.

Kurz gesagt, Sie erhalten die OSX-Standardeinstellungen sowie alle Anwendungen, die sich selbst hinzufügen /etc/paths.d. (MacTex tut dies beispielsweise auf meinem System.) Wenn Sie also Ihren MacVim-Pfad anpassen möchten, besteht eine Möglichkeit darin, eine Datei mit Elementen hinzuzufügen /etc/paths.d. (Ich würde /etc/pathsseitdem nicht mehr direkt bearbeiten. Sie laufen Gefahr, dass die Änderungen durch Systemupdates rückgängig gemacht werden.)

Vielen Dank, dass Sie mich darüber informiert haben. Ich mache einen Wunschliste-Fehler bei MacVim.

Telemachos
quelle
Ich hätte das auch gedacht, aber ich habe ein paar Dinge '/etc/paths.d/' hinzugefügt, die im Terminal angezeigt werden, aber nicht mit MacVim.
Donut
Tatsächlich befindet sich in meiner Datei '/ etc / path' mehr als in MacVims Pfad.
Donut
@ Donut: Nun, das ist seltsam. Wenn ich auf meinem Computer etwas hinzufüge, /etc/paths.dwird es beim nächsten Start von MacVim angezeigt. Welches Format geben Sie dort ein? Ich glaube, es sollte ein Element pro Zeile sein, mit einem $ PATH-Verzeichnis in jeder Zeile (z. B. / usr / texbin).
Telemachos
Ich habe Ihren ersten Absatz ursprünglich völlig verpasst: Die Wahl "Vim-Prozesse in einer Login-Shell starten" hat den Trick für mich getan. Siehe meine Antwort.
Donut
7

Übrigens ist die Einstellung "Vim-Prozesse in einer Login-Shell starten" in MacVim nicht mehr verfügbar (zumindest nicht in Version 7.3). Ich sehe, dass das Starten von MacVim über den Finder den falschen Pfad erhält, das Starten über eine Shell (als "mvim") jedoch den richtigen Pfad.

LS
quelle
3

Es stammt nicht aus .bash_profile, aber Sie können dies in Ihrem .vimrc verwenden:

let $PATH=$PATH . ':/blah/foo'

Sie müssen das: haben, sonst ist es keine korrekte PATH-Variable.

Richard Turner
quelle
Ich habe es gerade versucht, und dies scheint den $ PATH für MacVim nicht zu ändern. Ich habe es auch mit Vim im Terminal getestet (sowohl /usr/bin/vim(von Apple) als auch /opt/local/bin/vim(von MacPorts), und es scheint unnötig. Vim im Terminal nimmt bereits den richtigen $ PATH auf, der von meinen Punktedateien stammt.
Telemachus
1
Ich habe es auch ohne Erfolg versucht.
Donut
2

Ich kann nicht glauben, dass ich das vorher nicht gesehen habe. Okay, ich kann es glauben. Auf jeden Fall bietet MacVim eine Option, die dieses Problem löst. Aktivieren Sie unter "Einstellungen" die Option "Vim-Prozesse in einer Anmeldeshell starten". Das ist es, es funktioniert. Snazzy. Ich Idiot.

Hoppla

Ich habe diese Antwort versehentlich geschrieben, ohne zu bemerken, dass Telemachos mir bereits die richtige Antwort gegeben hat . Markierte seine als Antwort.

Krapfen
quelle
Ich bin froh, dass es sortiert ist
Telemachos
1

Dieser Artikel im Mac Dev Center kann von Nutzen sein.

Lawrence Velázquez
quelle
Kann es nicht zum Laufen bringen. Könnte etwas falsch machen. In diesem Artikel wird vorgeschlagen, die Eigenschaft 'LSEnvironment' in die Datei 'Informationseigenschaftsliste' einer App aufzunehmen, die ich als ~ / Library / Preferences / org.vim.MacVim.plist angenommen habe. Ich habe daraus ein Wörterbuch mit 'PATH' (habe auch 'path' und '$ PATH' ausprobiert) als Schlüssel und dem, was ich für den Pfad als Zeichenfolgenwert haben möchte, erstellt. Scheint immer noch PATH aus einer mysteriösen Quelle zu ziehen. Screenshot der Plist-Datei
Donut
1

Ich hatte kein Problem damit, eine Datei zum Verzeichnis paths.d hinzuzufügen. Ich habe eine Datei namens mysql hinzugefügt, deren Inhalt war:

/ usr / local / mysql / bin [Zurück]

Dann habe ich diese Datei im Verzeichnis paths.d abgelegt und ihren Besitz in root: rad geändert. Jetzt wird das MySQL-Verzeichnis automatisch zu meiner Variablen $ PATH hinzugefügt.

Ich habe nicht vollständig nachgeforscht, aber möglicherweise ist (a) das Einfügen von [RETURN] am Ende der Zeile und / oder (b) das Festlegen des Dateieigentums auf root erforderlich.

Jan Hettich
quelle
1

Ich bin heute darauf gestoßen. MacVim verfügt nicht mehr über die Option "Login-Shell", und das Bearbeiten systemweiter Dateien für eine benutzerspezifische Einstellung ist lückenhaft.

Hier ist eine Lösung, die nur vim-Optionen verwendet (siehe :help :!und :help shell).

Fügen ~/.vimrcSie die Zeilen hinzu

set shell=/bin/bash
set shellcmdflag=-l\ -c

Dadurch wird bashIhre Standard-Shell von (Mac) Vim erstellt und das -lFlag (Login-Shell) zu Befehlen hinzugefügt, mit denen aufgerufen wird :!{cmd}. Bei der Ausführung :shellwird bash als "interaktive Shell, die keine Login-Shell ist" gestartet.

Damit die $PATHArbeit funktioniert, muss sie ~/.bash_profilefür :!und ~/.bashrcfür eingerichtet sein :shell. (Siehe INVOCATIONin man bash)

UPDATE: Dies war auf meinem anderen Computer nicht erforderlich, daher gibt es wahrscheinlich noch etwas anderes, das die Hauptursache ist.

jladan
quelle
1
Sie können etwas Ähnliches für zsh tun. Definieren Sie $PATHin .zprofileund fügen Sie das -lFlag in entweder set shelloder ein set shellcmdflag.
jladan
0

Ich weiß mehr über Unix als über Macs, daher kann der folgende Rat funktionieren oder auch nicht. Versuchen Sie, dies in Ihre .vimrc-Datei einzufügen:

! source ~/.bash_profile

Das mag den Trick machen, aber es gibt eine kleine Einschränkung: Das .bash_profile soll nur einmal bezogen werden. Es kann einige nicht idempotente Befehle enthalten (Dinge, die nur einmal ausgeführt werden sollten). Ein typisches Beispiel:

$PATH += /blah/foo:/bar/etc

Je mehr aufgerufen wird, desto größer und redundanter $PATHwird es. Wenn dies jedoch keine so große Sache ist, wird unter Unix empfohlen, den einmaligen Befehl in Ihre Datei einzufügen ~/.bashrcund von dort aus auszuführen .source ~/.bashrc.vimrc

David Berger
quelle
Weder die Beschaffung von .bash_profile noch .bashrc funktionierte. Ich habe versucht, manuell auszuführen, :source .bash_profileaber es wird nur der Fehler "Kein Editorbefehl" für jeden Befehl in der Datei angezeigt, ebenso wie für .bashrc.
Donut
Entschuldigung ... was habe ich gedacht ... Sie könnten es versuchen! Quelle .bash_profile
David Berger
Versuchte sowohl .bash_profile als auch .bashrc, aber immer noch nicht zu gehen. Folgendes verwende ich in meinem .bash_profile, um PATH zu ändern: 'PATH = / usr / local / bin: /Applications/Espresso.app/Contents/SharedSupport/Tools /: / Applications / MacVim /: $ PATH' und in meinem .bashrc: 'export PATH = / Applications / MAMP / bin / php5 / bin: $ PATH'. Und es ist .bash_profile, das sich tatsächlich auf meine Terminalsitzungen auswirkt.
Donut
0

Ich habe auf der Vim StackExchange-Website eine sehr ähnliche Frage gestellt und dort eine Antwort gepostet, die für mich funktioniert!

Brad Parks
quelle