Zaktualizuj wbudowany vim w systemie Mac OS X


112

Wiem, że może to być bardziej odpowiednie w Ask Different, ale ponieważ próbowałem tam dodawać tagi, nie było vimtylko tagu macvim. Pomyślałem więc, że mógłbym tu zdobyć lepszą publiczność.

W terminalu wykonuję następujące czynności

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

Kiedy przeglądam witrynę http://www.vim.org , widzę wiadomość

Vim 7.3 wydany!

Jak zaktualizować wbudowany vim? Bardzo chciałbym to zrobić czysto (tj. Bez zduplikowanych instalacji, żadnych dodatkowych pobrań, bez macportów itp.)

Rozważałem użycie Mercurial (ponieważ używam go już do innych rzeczy), zgodnie z instrukcjami tutaj .

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

Ale myślę, że spowodowałoby to zduplikowaną instalację. Pomimo mojego „czystego” wymogu, jak wspomniano powyżej, „nieczyste” rozwiązania są również mile widziane, ponieważ może naprawdę nie ma innego wyjścia.


8
Ogólnie uważam, że najlepiej nie grzebać w bitach zainstalowanych przez Apple i używać macports / homebrew / etc. lub zbuduj go samodzielnie i zainstaluj w /usr/local/. Nie, żeby zajmowało dużo miejsca.
steveax

github.com/b4winckler/macvim/releases <- możesz pobrać najnowsze migawki macvima tutaj
lfender6445

Odpowiedzi:


119

Nie nadpisuj wbudowanego Vima.

Zamiast tego zainstaluj go ze źródła w innej lokalizacji lub przez Homebrew lub MacPorts w ich domyślnej lokalizacji, a następnie dodaj tę linię do swojego .bashrc lub .profile:

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

i / lub zmień swój, $PATHaby sprawdzał lokalizację przed domyślną lokalizacją.

Moim zdaniem najlepszą rzeczą do zrobienia jest po prostu pobranie najnowszego MacVima, który jest dostarczany z bardzo kompletnym plikiem wykonywalnym Vima i użycie go w Terminal.app w ten sposób.

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

3
W systemie Mac OS X 10.8.2 ścieżka jest nieco inna:/Applications/MacVim.app/Contents/MacOS/Vim
zakangelle

2
Nie, jest tak samo w każdej wersji Mac OS X. Właśnie popełniłem literówkę. Dzięki.
romainl

@ fabian789: Po pierwsze, ponieważ jest bezużyteczny, dwa, ponieważ miękki jest lepszy niż twardy, trzy, ponieważ domyślny Vim działa i jeśli coś pójdzie nie tak, możesz już nie mieć działającego Vima, cztery uaktualnienie systemu może nadpisać twojego Vima i lista prawdopodobnie mogłaby dalej i dalej…
romainl

2
... lub alias vim='mvim -v'. Ale oba te problemy zawodzą przy sudo vimużywaniu starej wersji. Sugerowałbym użycie odpowiedzi @ RobertMartin lub menedżera pakietów. Jest jeszcze jedna opcja: ta odpowiedź autorstwa Slizzered na serverfault.com, która pozwala na przekazywanie aliasów do sudo.
Brian McCutchon

„Aliasy to skróty do powłoki interaktywnej; nie są używane przez inne procesy” - mówi ta odpowiedź. stackoverflow.com/questions/37466767/… Dlatego to nie działa w przypadku, powiedzmy, git difftoollub git commit.
jasonszhao

130

Jeśli dobrze rozumiem, chcesz zainstalować na swoim istniejącym Vimie, na lepsze lub gorsze :-) To zły pomysł i nie jest to "czysty" sposób na zrobienie tego. Czemu? Cóż, OS X spodziewa się, że nic się nigdy nie zmieni w / usr / bin bez jego wiedzy, więc za każdym razem, gdy nadpisujesz tam rzeczy, ryzykujesz zerwanie skomplikowanej współzależności. Powiedzmy, że coś zepsujesz - nie ma sposobu, aby „cofnąć” to uszkodzenie. Będziesz smutny i samotny. Może być konieczna ponowna instalacja systemu OS X.

Część 1: Lepszy pomysł

"Czystym" sposobem jest instalacja w oddzielnym miejscu i nadanie nowemu plikowi binarnemu wyższego priorytetu w zmiennej $ PATH. Oto, jak polecam to zrobić:

$ # 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

Voila! Teraz, kiedy używamy vima, będziemy używać nowego. Ale aby wrócić do naszej starej konfiguracji w przypadku ogromnych kopii zapasowych f *, możemy po prostu usunąć katalog / 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

Zobacz, jakie to czyste.

Polecam nie instalować w / usr / local / bin, gdy chcesz przesłonić pliki binarne w / usr / bin, ponieważ domyślnie OS X nadaje / usr / bin wyższy priorytet w $ PATH niż / usr / local / bin i który otwiera swoją własną puszkę robaków… Więc to właśnie POWINIENEŚ zrobić.

Część 2: „Prawidłowa” odpowiedź (ale zły pomysł)

Zakładając, że zamierzasz to zrobić, jesteś na dobrej drodze. Aby zainstalować nad bieżącą instalacją, musisz ustawić katalog „prefix”. Zrobiono to w ten sposób:

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

Jeśli chcesz, możesz przekazać też kilka innych opcji. Wykonaj „./configure --help”, aby je zobaczyć. Mam jednak nadzieję, że masz kopię zapasową, zanim to zrobisz, na wypadek, gdyby coś poszło nie tak ...


Hmm ... Nie wiem, czy powinienem to zagłosować ... Odpowiada na pytanie ... Ale to zły pomysł i nie wyjaśnia dlaczego ... Więc może powinienem go zlekceważyć?
Arafangion

Świetna odpowiedź, ale jako początkujący * nix jestem ciekawy, dlaczego wybrałeś ~, aby zainstalować vim. Co robi ta linia ./configure ...? Dzięki jeszcze raz.
AlexMA

@AlexMA Umieszczenie źródła ~, tj. Katalogu domowego, jest całkowicie dowolne. Możesz go pobrać w dowolne miejsce. Po zainstalowaniu możesz również usunąć katalog (źródło nie jest już potrzebne).
Robert Martin

3
Wielkie dzięki za wskazówkę! Dostosowałem twoją konfigurację dla obsługi Pythona, PERL i Ruby do./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,

„Voila! Teraz, gdy użyjemy vima, będziemy używać starego.” Myślę, że to jest literówka, a chciałeś powiedzieć „użyjemy nowego
Skullkid

55

Podobnie jak Eric, użyłem homebrew, ale użyłem domyślnego przepisu. Więc:

brew install mercurial
brew install vim

Po ponownym uruchomieniu terminala vim homebrew powinien być domyślny. Jeśli nie, zaktualizuj swój $PATHplik, tak aby /usr/local/binbył wcześniej /usr/bin. Na przykład dodaj do swojego .profile:

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

6
@Beau To nie jest poprawne, homebrew ma formułę dla vima: github.com/mxcl/homebrew/blob/master/Library/Formula/vim.rb
Koen.

Wybacz, moja wina! A brew updaterzeczywiście zwrócił mi formułę na vim.
Beau

Napraw vi[sudo] ln -sf /usr/local/bin/vim /usr/bin/vi
linki

Dodałem mój vilink symboliczny do /usr/local/bin:ln -s /usr/local/bin/vim /usr/local/bin/vi
wisbucky

„A po ponownym uruchomieniu vim terminala homebrew” to nagle uderzyło mnie - muszę go wyłączyć i ponownie włączyć, aby nowy vim działał. Dzięki stary
Peter Perháč

7

Uwaga do odpowiedzi romainla: aliasy nie działają razem z sudo, ponieważ tylko pierwsze słowo jest sprawdzane na aliasach. Aby to zmienić, dodaj kolejny alias do swojego .profile / .bashrc:

alias sudo='sudo '

Dzięki tej zmianie sudo vimbędzie zachowywać się zgodnie z oczekiwaniami!


6

Na Yosemite zainstaluj vim używając brewi override-system-viopcji. Spowoduje to automatyczne zainstalowanie Vima z funkcjami „ogromnej” instalacji vima .

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

Wynik tego polecenia pokaże ci, gdzie brew zainstalował vim. W tym folderze przejdź do, /bin/vimaby faktycznie uruchomić vim. To jest twoje polecenie, aby uruchomić vima z dowolnego folderu:

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

Następnie aliasuj to polecenie, dodając następujący wiersz w swoim .bashrc:

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

EDYCJA: flaga Brew --override-system-vizostała wycofana. Zmieniony dla --with-override-system-vi. Źródło: https://github.com/Shougo/neocomplete.vim/issues/401


1
w ten sposób musisz aktualizować alias za każdym razem, gdy aktualizujesz vima. Nie jest również konieczne dodawanie dokładnej lokalizacji jako aliasu, ponieważ vim automatycznie dodaje plik binarny do / usr / local / bin.
Flaudre

Flaga Brew --override-system-vijest teraz przestarzała. Użyj --with-override-system-viinsted.
alhuelamo

@ahuelamo Czy masz źródło? Jeśli tak, możesz edytować i pozyskiwać. Dzięki
Prywatne

@Private Cóż, zasugerował to sam brew. Możesz go również znaleźć tutaj github.com/Shougo/neocomplete.vim/issues/401
alhuelamo

Dodawanie aliasu jest zbędne, gdy używana jest flaga zastąpienia.
apostl3pol

1

brew install vim --override-system-vi


1
Nie podaje opisu ani odniesienia do tego, dlaczego należy uruchomić tę komendę.
ngfgrant

1

Ten wpis na blogu był dla mnie pomocny. Użyłem rozwiązania "Vim zbudowany przez Homebrew", które w moim przypadku zapisało nową wersję w / usr / local / bin. W tym momencie post sugerował ukrycie systemowego vima, który nie działał dla mnie, więc zamiast tego użyłem aliasu.

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

1
Ciekawy. Próbowałem tego, ale napar musiał automatycznie zastąpić ścieżkę. Rozmowa vimzdawała się otwierać nowy vim (po otwarciu nowego terminala)
Dylanthepiguy

1
@Dylanthepiguy zgodził się, nie ma potrzeby tworzenia tutaj aliasu, jeśli używasz homebrew. Zarówno uruchomienie nowej powłoki, jak i ponowne sourcing mojego bashrc w istniejącym terminalu działały, aby zaktualizować polecenie vim do nowej wersji homebrew.
kjones

1

Właśnie zainstalowałem vim przez:

brew install vim

teraz nowy vim jest dostępny przez, vima stary vim (wbudowany vim) przezvi

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.