$ PATH в Vim не соответствует терминалу

10

Я использую MacVim, и когда я не запускаю его из Terminal ( mvim), его $ PATH не включает то, что я установил в своем .bash_profile. Кажется, только значения по умолчанию /usr/bin:/bin:/usr/sbin:/sbin.

Я использую OS X 10.5.8. Даже если бы я мог установить его вручную в моем .vimrc, это было бы хорошо, хотя я бы предпочел, чтобы он извлекался из того же места, что и Терминал. Я попытался следовать тому, что предложил один сайт, let $PATH += /blah/foo:/bar/etcно безрезультатно.

Изменить / Решение: см. Мой ответ ниже. MacVim имеет возможность исправить это.

пончик
источник
Подобный вопрос здесь
Брэд Паркс

Ответы:

12

MacVim, похоже, получает $ PATH способом, который игнорирует пользовательские точечные файлы обычного пользователя.

Я не могу сказать, почему они предпочитают делать это таким образом, но, похоже, это правда. В настройках (на вкладке «Дополнительно») вы можете выбрать «Запустить процессы Vim в оболочке входа в систему», но это только $PATHнемного улучшит меня.

Лучшее, что я могу сказать, - MacVim использует /usr/libexec/path_helper- который, в свою очередь, использует найденные элементы (1) в /etc/pathsфайле и (2) все, что дополнительно найдено в /etc/paths.d/каталоге. Любые изменения, сделанные в домашнем каталоге пользователя (с помощью .profileили тому подобное), игнорируются.

Короче говоря, вы получаете значения по умолчанию OSX, а также любые приложения, которые добавляют себя /etc/paths.d. (Например, MacTex делает это в моей системе.) Поэтому, если вы хотите изменить путь к MacVim, одним из способов будет добавление файла с элементами /etc/paths.d. (Я бы не стал редактировать напрямую /etc/pathsс тех пор, как вы рискуете, что изменения будут отменены обновлениями системы.)

Спасибо, что сообщили мне об этом. Я отправил сообщение об ошибке в MacVim.

Телемах
источник
Я бы тоже так подумал, но я добавил несколько вещей /etc/paths.d/, которые отображаются в терминале, но не в MacVim.
пончик
На самом деле, в моем файле / etc / paths содержится больше, чем в пути MacVim.
пончик
@ Донут: ну, это странно. На моей машине, если я что-то добавлю /etc/paths.d, она появится при следующей загрузке MacVim. Какой формат вы там вводите? Я полагаю, что это должен быть один элемент в строке с каталогом $ PATH в каждой строке (например, / usr / texbin).
Телемах
Первоначально я полностью пропустил ваш первый абзац: выбор «Запустить процессы Vim в оболочке входа в систему» ​​помог мне. Смотри мой ответ.
пончик
7

Кстати, предпочтение «Запустить процессы Vim в оболочке входа в систему» ​​больше не доступно в MacVim (по крайней мере, не v7.3). Я вижу, что запуск MacVim из Finder дает неверный путь, но запуск его из оболочки (как «mvim») дает правильный путь.

LS
источник
3

Он не получен из .bash_profile, но вы можете использовать это в вашем .vimrc:

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

Вы должны иметь: или это не будет правильной переменной PATH.

Ричард Тернер
источник
Я только что попробовал, и это не меняет $ PATH для MacVim. Я также протестировал его с Vim в терминале (как /usr/bin/vimот Apple), так и /opt/local/bin/vim(от MacPorts), и это кажется ненужным. Vim в терминале уже выбирает правильный $ PATH, полученный из моих точечных файлов.
Telemachus
1
Я попробовал это также безрезультатно.
пончик
2

Я не могу поверить, что я не видел этого раньше. Хорошо, я могу в это поверить. В любом случае, MacVim поставляется с опцией, которая решает эту проблему. В разделе «Настройки» просто установите флажок «Запустить процессы Vim в оболочке входа». Вот и все, это работает. Snazzy. Глупый я.

ой

Я случайно написал этот ответ, не понимая, что Телемах уже дал мне правильный ответ . Помечен как ответ.

пончик
источник
Рад, что это отсортировано
Telemachus
1

Эта статья Mac Dev Center может быть полезна.

Лоуренс Веласкес
источник
Не могу заставить его работать. Может делать что-то не так. В статье предлагается добавить свойство «LSEnvironment» в «файл списка свойств информации» приложения, который я предположил как ~ / Library / Preferences / org.vim.MacVim.plist. Я сделал это словарь с «PATH» (также пробовал «путь» и «$ PATH») в качестве ключа и то, что я хочу для пути в качестве строкового значения. По-прежнему, кажется, извлекает PATH из какого-то таинственного источника. Скриншот файла plist
пончик
1

У меня не было проблем с добавлением файла в каталог paths.d. Я добавил файл с именем mysql, содержимое которого было:

/ USR / местные / MySQL / бен [Return]

Затем я поместил этот файл в каталог paths.d и изменил его владельца на root: wheel. Теперь каталог mysql автоматически добавляется в мою переменную $ PATH.

Я не исследовал полностью, но, возможно, (a) включая [RETURN] в конце строки и / или (b) установку владельца файла на root, возможно, потребуется.

Ян Хеттих
источник
1

Я столкнулся с этим сегодня. MacVim больше не имеет опции «login shell», и редактирование общесистемных файлов для пользовательской настройки является схематичным.

Вот решение, использующее только параметры vim (см. :help :!И :help shell).

В вашем ~/.vimrcдобавить строки

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

Это делает bashоболочку по умолчанию из (Mac) Vim и добавляет -lфлаг (оболочку входа в систему) к командам, вызываемым с помощью :!{cmd}. При выполнении :shellbash запускается как «интерактивная оболочка, которая не является оболочкой входа в систему».

Чтобы сделать $PATHработу, нужно, чтобы она была установлена ~/.bash_profileдля :!и ~/.bashrcдля :shell. (См. INVOCATIONВ man bash)

ОБНОВЛЕНИЕ: Это не было необходимым на моем другом компьютере, так что, вероятно, что-то еще, что является основной причиной.

jladan
источник
1
Вы можете сделать то же самое для Zsh. Определите $PATHв .zprofileи включите -lфлаг в set shellили set shellcmdflag.
Jladan
0

Я знаю больше о Unix, чем о Mac, поэтому следующий совет может или не может работать. Попробуйте поместить этот файл .vimrc:

! source ~/.bash_profile

Это может сработать, но есть небольшое предостережение: .bash_profile предназначен только для одного источника. Он может содержать некоторые неидемпотентные команды (вещи, которые должны выполняться только один раз). Дело в точке:

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

Чем больше вызывается, тем больше и больше резервируется $PATH. Однако, если это не так уж и важно, рекомендуется для Unix ввести одноразовую команду ~/.bashrcи запустить ее source ~/.bashrcиз вашего .vimrcфайла.

Дэвид Бергер
источник
Ни источник .bash_profile, ни .bashrc не сработали. Я попытался запустить вручную, :source .bash_profileно он просто выдает ошибку «Не команда редактора» для каждой команды в файле и то же самое с .bashrc.
пончик
извини ... о чем я думал ... ты можешь попробовать! источник .bash_profile
Дэвид Бергер
Пробовал оба .bash_profile и .bashrc, но все равно не идти. Вот что я использую в своем .bash_profile для изменения PATH: 'PATH = / usr / local / bin: /Applications/Espresso.app/Contents/SharedSupport/Tools /: / Applications / MacVim /: $ PATH' И в моем .bashrc: 'export PATH = / Applications / MAMP / bin / php5 / bin: $ PATH'. И именно .bash_profile действительно влияет на мои сеансы терминала.
пончик