Обновите встроенный 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
Koen.
источник
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будет вести себя как положено!

jayeff
источник
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

Toothrot
источник
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
Kkelleey
источник
1
Интересный. Я пробовал это, но brew, должно быть, автоматически заменил путь. Звонок, vimпохоже, открыл новый vim (после открытия нового терминала)
Dylanthepiguy
1
@Dylanthepiguy согласен, нет необходимости создавать здесь псевдоним, если вы используете homebrew. И запуск новой оболочки, и повторный поиск моего bashrc в существующем терминале помогли обновить команду vim до новой версии homebrew.
kjones
1

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

brew install vim

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

МВД
источник