Обновите встроенный vim в Mac OS X


112

Я знаю, что это может быть более подходящим для Ask Different, но когда я попытался добавить туда теги, не было vimтолько тега macvim. Так что я решил, что здесь у меня может быть получше аудитория.

В Терминале я делаю следующее

$ vim --version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Jan 31 2010 13:33:49)

Когда я перехожу на http://www.vim.org , я вижу новость

Вышел Vim 7.3!

Как мне обновить встроенный vim? Я бы очень хотел сделать это чисто (то есть без дублирующих установок или каких-либо дополнительных загрузок, без macports и т. Д.)

Я подумывал об использовании Mercurial (поскольку я уже использую его для других целей) в соответствии с инструкциями здесь .

$ hg clone https://vim.googlecode.com.hg/ vim
$ cd vim/src
$ make

Но я думаю, что произведет дублирующую установку. Несмотря на мое «чистое» требование, как упомянуто выше, «нечистые» решения также приветствуются, поскольку, возможно, другого пути действительно нет.


8
В общем, я считаю, что лучше не гадить с установленными битами Apple и использовать macports / homebrew / etc. или соберите его сами и установите /usr/local/. Не то чтобы это займет много места.
— steveax

github.com/b4winckler/macvim/releases <- последние снимки macvim можно скачать здесь
— lfender6445

Ответы:


119

Не перезаписывайте встроенный Vim.

Вместо этого установите его из источника в другом месте или через Homebrew или MacPorts в их расположение по умолчанию, а затем добавьте эту строку в свой .bashrc или .profile:

alias vim='/path/to/your/own/vim'

и / или измените свой $PATHтак, чтобы он смотрел в свое местоположение раньше, чем в местоположение по умолчанию.

На мой взгляд, лучше всего просто загрузить последнюю версию MacVim, которая поставляется с очень полным исполняемым файлом vim, и использовать его в Terminal.app вот так.

alias vim='/Applications/MacVim.app/Contents/MacOS/Vim' # or something like that, YMMV

3
В Mac OS X 10.8.2 путь немного отличается:/Applications/MacVim.app/Contents/MacOS/Vim
— zakangelle

2
Нет, так во всех версиях Mac OS X. Я только что сделал опечатку. Спасибо.
— romainl

@ fabian789: Во-первых, потому что это бесполезно, два, потому что мягкий лучше, чем жесткий, три, потому что Vim по умолчанию работает, и если что-то пойдет не так, у вас может больше не быть работающего Vim, четыре обновление системы может перезаписать ваш Vim, и список, вероятно, может продолжай и продолжай…
— romainl

2
... или alias vim='mvim -v'. Но оба они терпят неудачу при sudo vimиспользовании старой версии. Я бы предложил использовать ответ @ RobertMartin или диспетчер пакетов. Там также один другой вариант: этот ответ на Slizzered на serverfault.com, который позволяет передавать псевдонимы sudo.
— Брайан МакКатчон,

«Псевдонимы - это ярлыки для интерактивной оболочки; они не используются другими процессами», - говорится в этом ответе. stackoverflow.com/questions/37466767/… Следовательно, это не работает, скажем, git difftoolили git commit.
— jasonszhao 07

131

Если я правильно понимаю, вы хотите установить поверх существующего Vim, к лучшему или худшему :-) Это плохая идея, и это не «чистый» способ сделать это. Зачем? Что ж, OS X ожидает, что ничего не изменится в / usr / bin без его ведома, поэтому каждый раз, когда вы перезаписываете там что-то, вы рискуете нарушить некоторую сложную взаимозависимость. И, допустим, вы что-то сломали - нет никакого способа «исправить» это повреждение. Вам будет грустно и одиноко. Возможно, вам придется переустановить OS X.

Часть 1. Лучшая идея

«Чистый» способ - установить в отдельном месте и сделать новый двоичный файл более приоритетным в $ PATH. Вот как я рекомендую это делать:

$ # Create the directories you need
$ sudo mkdir -p /opt/local/bin
$ # Download, compile, and install the latest Vim
$ cd ~
$ hg clone https://bitbucket.org/vim-mirror/vim or git clone https://github.com/vim/vim.git
$ 
$ cd vim
$ ./configure --prefix=/opt/local
$ make
$ sudo make install
$ # Add the binary to your path, ahead of /usr/bin
$ echo 'PATH=/opt/local/bin:$PATH' >> ~/.bash_profile
$ # Reload bash_profile so the changes take effect in this window
$ source ~/.bash_profile

Вуаля! Теперь, когда мы будем использовать vim, мы будем использовать новый. Но, чтобы вернуться к нашей старой конфигурации в случае огромного провала, мы можем просто удалить каталог / opt.

$ which vim
/opt/local/bin/vim
$ vim --version | head -n 2
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Aug 27 2011 20:55:46)
MacOS X (unix) version

Посмотрите, насколько это чисто.

Я рекомендую не устанавливать в / usr / local / bin, если вы хотите переопределить двоичные файлы в / usr / bin, потому что по умолчанию OS X ставит / usr / bin более высокий приоритет в $ PATH, чем / usr / local / bin, и заворачивает с который открывает свою банку с червями .... Итак, это то, что вы ДОЛЖНЫ сделать.

Часть 2: «Правильный» ответ (но плохая идея)

Предполагая, что вы настроены на это, вы определенно на правильном пути. Чтобы установить поверх текущей установки, вам необходимо указать каталог «prefix». Делается это так:

hg clone https://bitbucket.org/vim-mirror/vim or git clone https://github.com/vim/vim.git
cd vim
./configure --prefix=/usr
make
sudo make install

Вы также можете передать "настроить" несколько других параметров, если хотите. Сделайте "./configure --help", чтобы увидеть их. Я надеюсь, что у вас есть резервная копия, прежде чем вы это сделаете, на случай, если что-то пойдет не так ...


Хм ... Я не знаю, должен ли я проголосовать за это ... Он отвечает на вопрос ... Но это плохая идея и не объясняет, почему ... Так что, возможно, мне следует проголосовать против?
— Арафангион

Отличный ответ, но как новичку в * nix мне любопытно, почему вы выбрали ~, чтобы установить vim. Кроме того, что делает эта строка ./configure ...? Еще раз спасибо.
— AlexMA 02

@AlexMA Размещение исходного кода ~, то есть вашего домашнего каталога, совершенно произвольно. Не стесняйтесь скачивать его куда хотите. После того, как вы установили его, вы также можете удалить каталог (на этом этапе источник больше не нужен).
— Роберт Мартин

3
Большое спасибо за подсказку! Я скорректировал вашу конфигурацию для поддержки Python, PERL и Ruby на./configure --prefix /opt/local --enable-perlinterp=yes --enable-pythoninterp=yes --enable-rubyinterp=yes --with-features=huge --with-python-config-dir=/System/Library/Frameworks/Python.framework/Versions/2.7
— Ain Tohvri

«Вуаля! Теперь, когда мы будем использовать vim, мы будем использовать старую». Я думаю, что это опечатка, и вы хотели сказать «мы будем использовать новую »
— Skullkid

55

Как и Эрик, я использовал домашнее пиво, но я использовал рецепт по умолчанию. Так:

brew install mercurial
brew install vim

И после перезапуска терминала по умолчанию должен быть vim homebrew. Если нет, вам следует обновить свой, $PATHтак что /usr/local/binэто было раньше /usr/bin. Например, добавьте в свой .profile:

export PATH=/usr/local/bin:$PATH

6
@Beau Это неверно, у homebrew есть формула для vim: github.com/mxcl/homebrew/blob/master/Library/Formula/vim.rb
— Koen.

Извини, это моя вина! A brew updateдействительно вернул мне формулу для vim.
— Beau

Исправить viсимволические [sudo] ln -sf /usr/local/bin/vim /usr/bin/vi
— ссылки

Я добавил свою viсимволическую ссылку на /usr/local/bin:ln -s /usr/local/bin/vim /usr/local/bin/vi
— wisbucky

«И после перезапуска vim терминала homebrew» вот когда меня внезапно осенило - мне нужно выключить и снова включить, чтобы новый vim заработал. Спасибо, человек
— Петер Перхач

7

Примечание к ответу romainl: псевдонимы не работают вместе с sudo, потому что на псевдонимах проверяется только первое слово. Чтобы изменить это, добавьте еще один псевдоним к вашему .profile / .bashrc:

alias sudo='sudo '

При этом изменение sudo vimбудет вести себя как положено!


6

В Yosemite установите vim, используя brewи override-system-viпараметр. Это автоматически установит vim с функциями «огромной» установки vim .

brew install vim --with-override-system-vi

Вывод этой команды покажет вам, где brew установлен vim. В этой папке зайдите в, /bin/vimчтобы запустить vim. Это ваша команда для запуска vim из любой папки:

/usr/local/Cellar/vim/7.4.873/bin/vim

Затем создайте псевдоним этой команды, добавив следующую строку в свой .bashrc:

alias vim="/usr/local/Cellar/vim/7.4.873/bin/vim"

EDIT: флаг Brew --override-system-viустарел. Заменено на --with-override-system-vi. Источник: https://github.com/Shougo/neocomplete.vim/issues/401


1
таким образом вы должны обновлять псевдоним при каждом обновлении vim. Кроме того, нет необходимости добавлять точное местоположение в качестве псевдонима, поскольку vim автоматически добавляет двоичный файл в / usr / local / bin.
— Flaudre

Флаг пивоварения --override-system-viустарел. Используйте --with-override-system-viinsted.
— alhuelamo 02

@ahuelamo У вас есть источник? Если так, не стесняйтесь редактировать и исходить. Благодарность
— Рядовой

@Private Ну, это было предложено самим пивом. Вы также можете найти его здесь github.com/Shougo/neocomplete.vim/issues/401
— alhuelamo

Добавление псевдонима излишне при использовании флага переопределения.
— apostl3pol

1

brew install vim --override-system-vi


1
Не дает описания или ссылки на то, почему эта команда должна быть запущена.
— ngfgrant

1

Эта запись в блоге была для меня полезной. Я использовал решение «Homebrew built Vim», которое в моем случае сохранило новую версию в / usr / local / bin. На этом этапе в сообщении предлагалось скрыть системный vim, который у меня не работал, поэтому вместо этого я использовал псевдоним.

$ brew install vim
$ alias vim='/path/to/new/vim
$ which vim
vim: aliased to /path/to/new/vim

1
Интересный. Я пробовал это, но brew, должно быть, автоматически заменил путь. Звонок, vimпохоже, открыл новый vim (после открытия нового терминала)
— Dylanthepiguy

1
@Dylanthepiguy согласен, нет необходимости создавать здесь псевдоним, если вы используете homebrew. И запуск новой оболочки, и повторный поиск моего bashrc в существующем терминале помогли обновить команду vim до новой версии homebrew.
— kjones

1

Я только что установил vim:

brew install vim

теперь новый vim доступен, vimа старый vim (встроенный vim) -vi

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.