Как использовать правильный рубин в vim? Как изменить $PATH в VIM?

Я использую простой Vim с поддержкой ruby ​​на Lion (установлен gist). Я использую ruby ​​с rbenv, поэтому мой путь выглядит как /users/me/.rbenv/shims:.....

Изнутри vim путь

:!echo $PATH
> usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fb/.rbenv/shims:....

Даже я могу создать и изменить переменную среды:

:let $PATH = "/bar:/foo"
:!echo $PATH
> /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/foo:/bar

пути остаются, начиная с /usr/bin.

Итак, как я могу получить доступ к своему ruby ​​1.9.3 в ~/.rbenv/shims вместо системного ruby ​​в /usr/bin?


person fbehrens    schedule 24.03.2012    source источник


Ответы (7)


Это известная проблема, представленная Apple в OS X 10.5 Leopard.

Если вы используете Bash или Zsh и используете неинтерактивные оболочки, вы затронуты.

Запуск sudo chmod ugo-x /usr/libexec/path_helper исправит ситуацию, но вы должны прочитать статью, чтобы понять, почему.

person Edward Ocampo-Gooding    schedule 27.08.2012
comment
Это решение работает отлично. Но я обнаружил, что предложение vim-rbenv от tpope лучше, потому что оно по-прежнему позволяет выполнять path_helper в интерактивных оболочках. Просто sudo mv /etc/zshenv /etc/zshrc и vim говорит Ура! - person Tiago; 28.03.2014
comment
Это действительно не может получить достаточно голосов. Это второй раз, когда я пришел сюда, потому что как вообще кто-то мог помнить, что им нужно делать это при настройке среды. - person Chris Nicola; 16.04.2015
comment
Я получаю ошибку chmod: Unable to change file mode on /usr/libexec/path_helper: Operation not permitted, когда запускаю эту команду. Любые указатели. - person Zuhaib; 22.02.2017
comment
@Zuhaib ты используешь sudo? - person Edward Ocampo-Gooding; 20.03.2017
comment
@EdwardOcampo-Gooding Я использую sudo, и у меня также есть проблема Зухаиба. - person azureai; 22.02.2020

rvm также имеет эту проблему. Если zsh является вашей оболочкой по умолчанию, при ее запуске выполняется /etc/zshenv.

Это выполняет /usr/libexec/path_helper. Это устанавливает путь на основе содержимого /etc/paths и /etc/paths.d/.

В часто задаваемых вопросах по rvm упоминается перенос /etc/zshenv на /zsh/zshrc. Я сделал это, и он удалил /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin с начала моего пути в macvim.

person PaddyDwyer    schedule 24.04.2012
comment
Я изменил /etc/paths, и это сработало для меня. Спасибо! Приятно это знать. - person duma; 04.03.2013

Я не устанавливал параметр shell в .vimrc, поэтому он автоматически был установлен на /bin/zsh.

Затем я обнаружил, что у меня есть двойная инициализация rbenv: в моем .zshrc. Я удалил расширение конца инициализации $PATH в .zshrc, потому что это уже было обработано плагином oh-my-zsh rbenv.

Даже после этой очистки управление $PATH все еще происходит, так что :!echo $PATH

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fb/.rbenv/shims:/Users/fb/.rbenv/bin: /Пользователи/fb/bin:/usr/local/sbin:/usr/игры

Мне помогла настройка :set shell=/bin/bash, так как я могу жить с bash в своем vim: :!echo $PATH

/Users/fb/.rbenv/shims:/Users/fb/.rbenv/bin:/Users/fb/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin :/sbin:/bin:/usr/games:/Users/fb/Dropbox/local/bash

person fbehrens    schedule 02.04.2012

В вашем файле ~/.bashrc (или любой другой оболочке, которую вы используете) добавьте следующую строку:

PATH=/home/me/.rbenv/shims:${PATH}

а затем запустите source ~/.bashrc (или .zshrc или любую другую оболочку, которую вы используете!)

person Paul Simpson    schedule 24.03.2012
comment
Если вы поместите это в ~/.bash_profile, вам не нужно будет запускать исходную команду (она будет автоматически запускать эту команду каждый раз, когда вы запускаете новую оболочку) - person Jwosty; 24.03.2012
comment
Верно - не подумал об этом. Хотя вам нужно будет запустить исходную команду только один раз для каждой оболочки, которая была открыта при редактировании ~/.bashrc. Я мысленно переводил с zsh на bash — мне просто хотелось сказать ему, чтобы он положил это в свой ~/.zshrc :) - person Paul Simpson; 24.03.2012
comment
Спасибо за ответы. Я использую zsh и не имею ни .bashrc, ни .bash_profile. Для тестирования я их создал, но это не помогает. Я использую zsh, и мой путь указан правильно как в терминале, так и в Iterm2. - person fbehrens; 27.03.2012
comment
в zsh echo $PATH ›/Users/fb/.rbenv/shims:... в vim :set shell? ›shell=/bin/zsh, :echo $PATH ›/Users/fb/.rbenv/shims:... но :!echo $PATH ›/usr/bin :/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fb/.rbenv/shims:... и так далее :!ruby -v›ruby 1.8.7 (2010- 01-10 patchlevel 249) [universal-darwin11.0] а не навороченная 1.9.3, :( ???? - person fbehrens; 27.03.2012
comment
Судя по инструкциям по установке (github.com/sstephenson/rbenv#section_2), это выглядит так: у вас должен быть ‹code›/home/me/.rbenv/bin‹/code› в вашем пути, а не ‹code›/home/me/.rbenv/shims‹/code›. Вы также можете попробовать rvm — у меня нет проблем с ним на Lion (rvm.beginrescueend.com) - person Paul Simpson; 27.03.2012

Это можно исправить, просто добавив

PATH=/home/me/.rbenv/shims:${PATH}

to

/etc/zshenv
person trnc    schedule 22.08.2012

Я не использую Mac или Zsh (у меня Linux), однако я столкнулся с этой проблемой, когда запускал gvim из меню MATE.

Я решил это, добавив это в свой .vimrc:

if $PATH !~ "\.rbenv"
    let $PATH="/home/username/.rbenv/shims:/home/username/.rbenv/bin:" . $PATH
endif

Это позволяет избежать его установки, если вы запускаете vim из терминала, иначе пути rbenv будут включены дважды.

Пробовал настроить запуск приложения через терминал, не помогло.

person Jordan Morris    schedule 15.02.2015

да, в OS X это bash_profile, который загружается при открытии нового окна консоли, тогда как в Linux это ваш bashrc

person phildobbin    schedule 24.03.2012