$ PATH w Vimie nie pasuje do Terminalu

9

Używam MacVim i kiedy nie uruchamiam go z terminala ( mvim ) jego $ PATH nie zawiera tego, co ustawiłem w moim pliku .bash_profile. Wydaje się, że ma tylko wartości domyślne, /usr/bin:/bin:/usr/sbin:/sbin.

Używam OS X 10.5.8. Nawet jeśli mógłbym ustawić go ręcznie w moim .vimrc, byłoby dobrze, chociaż wolałbym, żeby ściągał z tego samego miejsca co Terminal. Próbowałem śledzić to, co sugerowała jedna strona, dodając let $PATH += /blah/foo:/bar/etc bezskutecznie.

Edycja / rozwiązanie: Zobacz moją odpowiedź poniżej. MacVim ma opcję naprawienia tego.

donut
źródło
Podobny pytanie tutaj
Brad Parks

Odpowiedzi:

12

MacVim wydaje się, że pobiera $ PATH w sposób, który ignoruje zwykłe pliki dotfile użytkownika.

Nie mogę powiedzieć czemu wolą robić to w ten sposób, ale wydaje się, że to prawda. W preferencjach (na karcie Zaawansowane) możesz wybrać opcję „Uruchom procesy Vima w powłoce logowania”, ale poprawia to tylko $PATH trochę dla mnie.

Najlepsze, co mogę powiedzieć, używa MacVim /usr/libexec/path_helper - który z kolei używa znalezionych przedmiotów (1) w /etc/paths file i (2) cokolwiek dodatkowego znalezionego w /etc/paths.d/ informator. Wszelkie zmiany wprowadzone w katalogu domowym użytkownika (przez .profile lub tym podobne) jest ignorowane.

W skrócie otrzymujesz domyślne ustawienia OSX oraz wszystkie aplikacje, które się do nich dodają /etc/paths.d. (Na przykład MacTex robi to w moim systemie.) Jeśli więc chcesz dostosować ścieżkę MacVima, jednym ze sposobów byłoby dodanie pliku z elementami do /etc/paths.d. (Nie edytowałbym bezpośrednio /etc/paths od tego czasu ryzykujesz, że zmiany zostaną cofnięte przez aktualizacje systemu.)

Dzięki za poinformowanie mnie o tym. Wyszedłem z pliku błędów w MacVim.

Telemachus
źródło
Pomyślałbym o tym również, ale dodałem kilka rzeczy „/etc/paths.d/”, które pojawiają się w Terminalu, ale nie w MacVim.
donut
I rzeczywiście, w moim pliku „/ etc / paths” jest więcej niż w ścieżce MacVima.
donut
@Donut: cóż, to dziwne. Na mojej maszynie, jeśli coś dodam /etc/paths.d, pojawia się przy następnym uruchomieniu MacVima. Jaki format tam umieszczasz? Myślę, że powinien to być jeden element w wierszu z katalogiem $ PATH w każdej linii (np. / Usr / texbin).
Telemachus
Całkowicie przegapiłem pierwszy akapit: pierwotnie wybrałem „Uruchom procesy Vima w powłoce logowania”. Zobacz moją odpowiedź.
donut
7

BTW, preferencja „Uruchom procesy Vima w powłoce logowania” nie jest już dostępna w MacVim (przynajmniej nie w wersji 7.3). Widzę, że uruchomienie MacVima z Findera prowadzi do niewłaściwej ścieżki, ale uruchomienie go z powłoki (jako „mvim”) ma poprawną ścieżkę.

L S
źródło
3

Nie pochodzi z .bash_profile, ale możesz użyć tego w swoim .vimrc:

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

Musisz mieć: lub nie będzie poprawną zmienną PATH.

Richard Turner
źródło
Właśnie próbowałem, a to nie wydaje się zmieniać $ PATH dla MacVima. Przetestowałem to także z Vimem w Terminalu (oba /usr/bin/vim (od Apple) i /opt/local/bin/vim (z MacPorts) i wydaje się to niepotrzebne. Vim w terminalu już odbiera odpowiedni plik $ PATH pochodzący od moich plików kropek.
Telemachus
1
Próbowałem tego również bezskutecznie.
donut
2

Nie mogę uwierzyć, że wcześniej tego nie widziałem. Dobra, mogę w to uwierzyć. W każdym razie MacVim jest wyposażony w opcję, która rozwiązuje ten problem. W sekcji Preferencje zaznacz „Uruchom procesy Vima w powłoce logowania”. To wszystko, to działa. Odlotowy. Głupi ja.

Ups

Przypadkowo napisałem tę odpowiedź, nie wiedząc, że Telemachus już mi dał poprawna odpowiedź . Oznaczył jako odpowiedź.

donut
źródło
Cieszę się, że to posortowane
Telemachus
1

Ten artykuł w Mac Dev Center może być użyteczny.

Lawrence Velázquez
źródło
Nie mogę go uruchomić. Mogłoby zrobić coś złego. W artykule sugeruje się dodanie właściwości „LSEnvironment” w „pliku listy właściwości informacji” aplikacji, którą założyłem jako ~ / Library / Preferences / org.vim.MacVim.plist. Zrobiłem z niego słownik z 'PATH' (próbowałem także 'path' i '$ PATH') jako klucz i to, co chcę dla ścieżki jako wartość ciągu. Nadal wydaje się, że ciągnie PATH z jakiegoś tajemniczego źródła. Zrzut ekranu pliku plist
donut
1

Nie miałem problemu z dodaniem pliku do katalogu paths.d. Dodałem plik o nazwie mysql, którego zawartość była:

/ usr / local / mysql / bin [Return]

Następnie umieściłem ten plik w katalogu paths.d i zmieniłem jego własność na root: wheel. Teraz katalog mysql jest automatycznie dodawany do zmiennej $ PATH.

Nie przeprowadziłem pełnego dochodzenia, ale być może (a) włącznie z [POWRÓT] na końcu linii i / lub (b) ustawienie własności pliku na roota może być konieczne.

Jan Hettich
źródło
0

Wiem więcej o unixie niż o macach, więc poniższe porady mogą, ale nie muszą działać. Spróbuj umieścić to w swoim pliku .vimrc:

! source ~/.bash_profile

To może załatwić sprawę, ale istnieje niewielkie zastrzeżenie: plik .bash_profile ma być pozyskiwany tylko raz. Może zawierać niektóre polecenia nie idempotentne (rzeczy, które powinny być wykonywane tylko raz). Przykładem:

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

Im więcej się nazywa, tym większe i bardziej zbędne $PATH dostaje. Jeśli jednak nie jest to nic wielkiego, zalecenie dotyczące unixa polega na wprowadzeniu jednorazowego polecenia ~/.bashrc i biegnij source ~/.bashrc z twojego .vimrc plik.

David Berger
źródło
Nie działało ani pozyskiwanie .bash_profile, ani .bashrc. Próbowałem uruchomić ręcznie :source .bash_profile ale po prostu pojawia się błąd „Nie jest to polecenie edytora” dla każdego polecenia w pliku i to samo z .bashrc.
donut
przepraszam ... co myślałem ... możesz spróbować! źródło .bash_profile
David Berger
Próbowałem zarówno .bash_profile, jak i .bashrc, ale nadal nie idź. Oto, co używam w moim pliku .bash_profile, aby zmienić PATH: 'PATH = / usr / local / bin: /Applications/Espresso.app/Contents/SharedSupport/Tools /: / Applications / MacVim /: $ PATH' I w moim .bashrc: 'export PATH = / Applications / MAMP / bin / php5 / bin: $ PATH'. I to jest .bash_profile, który faktycznie wpływa na moje sesje terminala.
donut
0

Wpadłem na to dzisiaj. MacVim nie ma już opcji „powłoka logowania”, a edycja plików systemowych dla ustawień specyficznych dla użytkownika jest pobieżna.

Oto rozwiązanie wykorzystujące tylko opcje vim (patrz :help :! i :help shell ).

W Twoim ~/.vimrc dodaj linie

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

To sprawia bash twoja domyślna powłoka z (Mac) Vima i dodaje -l flag (powłoka logowania) do poleceń wywoływanych za pomocą :!{cmd}. Podczas wykonywania :shell, bash jest uruchamiany jako „powłoka interaktywna, która nie jest powłoką logowania”.

Zrobić $PATH pracuj, musisz to mieć ~/.bash_profile dla :!, i ~/.bashrc dla :shell. (Widzieć INVOCATION w man bash )

AKTUALIZACJA: To nie było konieczne na moim innym komputerze, więc prawdopodobnie jest coś innego, co jest główną przyczyną.

jladan
źródło
Możesz zrobić coś podobnego do zsh. Definiować $PATH w .zprofilei włącz -l flagę albo set shell lub set shellcmdflag.
jladan