Actualizar vim integrado en Mac OS X

112

Sé que esto podría ser más apropiado en Ask Different, pero cuando intenté agregar etiquetas allí, no había ninguna vimetiqueta, solo macvim. Así que pensé que podría tener una mejor audiencia aquí.

En la Terminal, hago lo siguiente

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

Cuando navego a http://www.vim.org , veo una noticia

¡Vim 7.3 lanzado!

¿Cómo actualizo mi vim integrado? Me gustaría mucho hacerlo de forma limpia (es decir, sin instalaciones duplicadas o descargas adicionales, sin macports, etc.)

Consideré usar Mercurial (como ya lo uso para otras cosas), según las instrucciones aquí .

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

Pero creo que eso haría una instalación duplicada. A pesar de mi requisito de "limpieza" como se mencionó anteriormente, las soluciones "sucias" también son bienvenidas, ya que tal vez realmente no haya otra manera.

Equipo
fuente
8
En general, creo que es mejor no jugar con los bits instalados por Apple y usar macports / homebrew / etc. o constrúyalo usted mismo e instálelo en /usr/local/. No es que vaya a ocupar mucho espacio.
steveax
github.com/b4winckler/macvim/releases <- puede descargar las últimas instantáneas de macvim aquí
lfender6445

Respuestas:

119

No sobrescriba el Vim incorporado.

En su lugar, instálelo desde la fuente en una ubicación diferente o mediante Homebrew o MacPorts en su ubicación predeterminada y luego agregue esta línea a su .bashrc o .profile:

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

y / o cambie el suyo $PATHpara que mire su ubicación antes que la ubicación predeterminada.

Lo mejor que se puede hacer, en mi opinión, es simplemente descargar el último MacVim que viene con un ejecutable vim muy completo y usarlo en Terminal.app así.

alias vim='/Applications/MacVim.app/Contents/MacOS/Vim' # or something like that, YMMV
romainl
fuente
3
En Mac OS X 10.8.2, la ruta es ligeramente diferente:/Applications/MacVim.app/Contents/MacOS/Vim
zakangelle
2
No, es igual en todas las versiones de Mac OS X. Acabo de cometer un error tipográfico. Gracias.
Romainl
@ fabian789: Primero porque es inútil, dos porque suave es mejor que duro, tres porque Vim predeterminado funciona y si algo sale mal es muy posible que ya no tenga un Vim que funcione, cuatro una actualización del sistema puede sobrescribir su Vim y la lista probablemente podría sigue y
sigue
2
... o alias vim='mvim -v'. Pero ambos fallan al sudo vimusar la versión anterior. Sugeriría usar la respuesta de @ RobertMartin o un administrador de paquetes. También hay otra opción: esta respuesta de Slizzered en serverfault.com, que le permite pasar alias a sudo.
Brian McCutchon
"Los alias son atajos para un shell interactivo; no son utilizados por otros procesos", dice esta respuesta. stackoverflow.com/questions/37466767/… Por lo tanto, esto no funciona para, digamos git difftoolo git commit.
jasonszhao
130

Si entiendo las cosas correctamente, desea instalar sobre su Vim existente, para bien o para mal :-) Esta es una mala idea y no es la forma "limpia" de hacerlo. ¿Por qué? Bueno, OS X espera que nada cambie en / usr / bin sin que él lo sepa, por lo que cada vez que sobrescribe cosas allí, corre el riesgo de romper alguna interdependencia intrincada. Y digamos que rompes algo, no hay forma de "deshacer" ese daño. Estarás triste y solo. Es posible que deba reinstalar OS X.

Parte 1: una mejor idea

La forma "limpia" es instalar en un lugar separado y hacer que el nuevo binario tenga mayor prioridad en $ PATH. Así es como recomiendo hacerlo:

$ # 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! Ahora, cuando usemos vim, usaremos el nuevo. Pero, para volver a nuestra configuración anterior en caso de grandes jodidas, podemos simplemente eliminar el directorio / 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

Mira lo limpio que está esto.

Recomiendo no instalar en / usr / local / bin cuando desee anular los binarios en / usr / bin, porque de forma predeterminada OS X pone / usr / bin una prioridad más alta en $ PATH que / usr / local / bin, y jugando con que abre su propia lata de gusanos ... Entonces, eso es lo que DEBE hacer.

Parte 2: La respuesta "correcta" (pero una mala idea)

Suponiendo que esté decidido a hacer eso, definitivamente va por buen camino. Para instalar sobre su instalación actual, necesita establecer el directorio "prefijo". Eso se hace así:

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

También puede pasar "configurar" algunas otras opciones, si lo desea. Haga "./configure --help" para verlos. Sin embargo, espero que tengas una copia de seguridad antes de hacerlo, en caso de que algo salga mal ...

Robert Martin
fuente
Hmm ... No sé si debería votar a favor de esto ... Responde la pregunta ... Pero es una mala idea y no explica por qué ... ¿Así que tal vez debería votar en contra?
Arafangion
Excelente respuesta, pero como principiante de * nix tengo curiosidad por saber por qué eligió ir a ~ para instalar vim. Además, ¿qué hace esa línea ./configure ...? Gracias de nuevo.
AlexMA
@AlexMA Poner la fuente ~, es decir, su directorio de inicio, es completamente arbitrario. No dudes en descargarlo donde quieras. Una vez que lo haya instalado, también puede eliminar el directorio (la fuente ya no es necesaria en ese momento).
Robert Martin
3
¡Muchas gracias por un consejo! ./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
Ajusté
"¡Voilá! Ahora, cuando usemos vim, usaremos el anterior". Creo que es un error tipográfico y usted quería decir "
usaremos
55

Al igual que Eric, usé homebrew, pero usé la receta predeterminada. Entonces:

brew install mercurial
brew install vim

Y después de reiniciar el terminal, el vim de homebrew debería ser el predeterminado. Si no es así, debe actualizar su $PATHpara que /usr/local/binsea ​​antes /usr/bin. Por ejemplo, agregue lo siguiente a su .profile:

export PATH=/usr/local/bin:$PATH
Koen.
fuente
6
@Beau Esto no es correcto, homebrew tiene una fórmula para vim: github.com/mxcl/homebrew/blob/master/Library/Formula/vim.rb
Koen.
¡Disculpa, mi error! De brew updatehecho, A me devolvió una fórmula para vim.
Beau
Corregir vienlaces simbólicos:[sudo] ln -sf /usr/local/bin/vim /usr/bin/vi
knight9631
vi/usr/local/binln -s /usr/local/bin/vim /usr/local/bin/vi
Agregué
"Y después de reiniciar el vim de homebrew de la terminal" fue entonces cuando de repente me di cuenta: necesito apagarlo y volver a encenderlo para que funcione el nuevo vim. Gracias hombre
Peter Perháč
7

Una nota a la respuesta de romainl: los alias no funcionan junto con sudo porque solo se verifica la primera palabra en los alias. Para cambiar esto, agregue otro alias a su .profile / .bashrc:

alias sudo='sudo '

¡Con este cambio sudo vimse comportará como se esperaba!

Jayeff
fuente
6

En Yosemite, instale vim usando brewy la override-system-viopción. Esto instalará automáticamente vim con las características de la instalación de vim 'enorme' .

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

La salida de este comando le mostrará dónde brew instaló vim. En esa carpeta, vaya a /bin/vimpara ejecutar vim. Este es su comando para ejecutar vim desde cualquier carpeta:

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

Luego, alias este comando agregando la siguiente línea en tu .bashrc:

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

EDITAR: La bandera de elaboración --override-system-viha quedado obsoleta. Cambiado por --with-override-system-vi. Fuente: https://github.com/Shougo/neocomplete.vim/issues/401

Privado
fuente
1
de esta manera, debe actualizar el alias cada vez que actualice vim. Además, no es necesario agregar la ubicación exacta como un alias ya que vim agrega automáticamente el binario a / usr / local / bin.
Flaudre
La bandera de --override-system-vielaboración ahora está obsoleta. Utilice --with-override-system-viinsted.
alhuelamo
@ahuelamo ¿Tienes una fuente? Si es así, siéntase libre de editar y buscar. Gracias
Privado
@Private Bueno, eso fue sugerido por brew. También puede encontrarlo aquí github.com/Shougo/neocomplete.vim/issues/401
alhuelamo
Agregar el alias es redundante cuando se usa el indicador de anulación.
apostl3pol
1

brew install vim --override-system-vi

Toothrot
fuente
1
No proporciona una descripción o referencia de por qué se debe ejecutar este comando.
ngfgrant
1

Esta publicación de blog fue útil para mí. Usé la solución "Homebrew built Vim", que en mi caso guardó la nueva versión en / usr / local / bin. En este punto, la publicación sugirió ocultar el sistema vim, que no funcionó para mí, así que usé un alias en su lugar.

$ brew install vim
$ alias vim='/path/to/new/vim
$ which vim
vim: aliased to /path/to/new/vim
kkelleey
fuente
1
Interesante. Intenté esto, pero brew debe haber reemplazado la ruta automáticamente. Llamar vimpareció abrir el nuevo vim (después de abrir una nueva Terminal)
Dylanthepiguy
1
@Dylanthepiguy estuvo de acuerdo, no es necesario crear un alias aquí si usa homebrew. Tanto el inicio de un nuevo shell como el re-abastecimiento de mi bashrc en la terminal existente funcionaron para actualizar el comando vim a la nueva versión homebrew.
kjones
1

Acabo de instalar vim por:

brew install vim

ahora se accede al nuevo vim vimy al antiguo vim (vim incorporado) porvi

desaparecido en combate
fuente