Atualize o vim integrado no Mac OS X

112

Eu sei que isso pode ser mais apropriado em Ask Different, mas como tentei adicionar tags lá, não havia vimtag, apenas macvim. Então achei que poderia conseguir um público melhor aqui.

No Terminal, eu faço o seguinte

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

Quando navego para http://www.vim.org , vejo uma notícia

Vim 7.3 lançado!

Como faço para atualizar meu vim integrado? Eu gostaria muito de fazer isso de forma limpa (ou seja, sem instalações duplicadas ou quaisquer downloads adicionais, sem macports, etc.)

Considerei usar o Mercurial (como já o uso para outras coisas), conforme as instruções aqui .

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

Mas acho que seria uma instalação duplicada. Apesar do meu requisito "limpo" como mencionado acima, soluções "impuras" também são bem-vindas, já que talvez não haja realmente nenhuma outra maneira.

Kit
fonte
8
Em geral, acho melhor não mexer com os bits instalados pela Apple e usar macports / homebrew / etc. ou crie você mesmo e instale-o no /usr/local/. Não que vá ocupar muito espaço.
steveax
github.com/b4winckler/macvim/releases <- você pode baixar os instantâneos mais recentes do macvim aqui
lfender6445

Respostas:

119

Não sobrescreva o Vim embutido.

Em vez disso, instale-o do código-fonte em um local diferente ou via Homebrew ou MacPorts em seu local padrão e adicione esta linha ao seu .bashrc ou .profile:

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

e / ou mude o seu $PATHpara que olhe em seu local antes do local padrão.

A melhor coisa a fazer, na minha opinião, é simplesmente baixar o MacVim mais recente que vem com um executável vim muito completo e usá-lo no Terminal.app assim.

alias vim='/Applications/MacVim.app/Contents/MacOS/Vim' # or something like that, YMMV
romainl
fonte
3
No Mac OS X 10.8.2, o caminho é um pouco diferente:/Applications/MacVim.app/Contents/MacOS/Vim
zakangelle
2
Não, é o mesmo em todas as versões do Mac OS X. Acabei de cometer um erro de digitação. Obrigado.
Romainl
@ fabian789: Primeiro porque é inútil, dois porque soft é melhor do que difícil, três porque o Vim padrão funciona e se algo der errado você pode muito bem não ter mais um Vim funcionando, quatro uma atualização do sistema pode sobrescrever seu Vim e a lista provavelmente poderia continue e
continue
2
... ou alias vim='mvim -v'. Mas ambos falham com o sudo vimuso da versão antiga. Eu sugeriria usar a resposta de @RobertMartin ou um gerenciador de pacotes. Há também uma outra opção: esta resposta do Slizzered em serverfault.com, que permite que você passe apelidos para sudo.
Brian McCutchon
“Aliases são atalhos para um shell interativo; eles não são usados ​​por outros processos”, diz esta resposta. stackoverflow.com/questions/37466767/… Portanto, isso não funciona para, digamos git difftoolou git commit.
jasonszhao
130

Se eu entendi as coisas corretamente, você deseja instalar sobre o seu Vim existente, para melhor ou para pior :-) Esta é uma má ideia e não é a maneira "limpa" de fazer isso. Por quê? Bem, o OS X espera que nada mude em / usr / bin sem o conhecimento dele, então sempre que você sobrescrever alguma coisa lá, você corre o risco de quebrar alguma interdependência intrincada. E, digamos que você quebre algo - não há como "desfazer" esse dano. Você ficará triste e sozinho. Você pode ter que reinstalar o OS X.

Parte 1: Uma ideia melhor

A maneira "limpa" é instalar em um local separado e tornar o novo binário de maior prioridade no $ PATH. Aqui está como eu recomendo fazer isso:

$ # 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! Agora, quando usarmos o vim, estaremos usando o novo. Mas, para voltar à nossa configuração antiga no caso de grandes f * ckups, podemos simplesmente excluir o diretório / 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

Veja como isso é limpo.

Eu recomendo não instalar em / usr / local / bin quando você deseja substituir binários em / usr / bin, porque por padrão o OS X coloca / usr / bin em maior prioridade em $ PATH do que em / usr / local / bin, e ferrando com que abre sua própria lata de minhocas ... Então, é isso que você DEVE fazer.

Parte 2: A resposta "correta" (mas uma má ideia)

Supondo que você esteja determinado a fazer isso, você está definitivamente no caminho certo. Para instalar em cima de sua instalação atual, você precisa definir o diretório "prefixo". Isso é feito assim:

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

Você pode passar "configurar" algumas outras opções também, se desejar. Faça "./configure --help" para vê-los. Espero que você tenha um backup antes de fazer isso, no entanto, caso algo dê errado ....

Robert Martin
fonte
Hmm ... Não sei se devo votar a favor disso ... Isso responde à pergunta ... Mas é uma má ideia e não explica por que ... Então talvez eu deva votar contra?
Arafangion
Ótima resposta, mas como um * nix iniciante, estou curioso para saber por que você escolheu ~ para instalar o vim. Além disso, o que essa linha ./configure ... faz? Obrigado novamente.
AlexMA
@AlexMA Colocar o código-fonte ~, ou seja, seu diretório pessoal, é completamente arbitrário. Fique à vontade para baixá-lo para onde quiser. Depois de instalado, você pode excluir o diretório também (a fonte não é mais necessária nesse ponto).
Robert Martin
3
Muito obrigado pela dica! Eu ./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
ajustei
"Voila! Agora, quando usarmos o vim, usaremos o antigo." Acho que é um erro de digitação e você quis dizer "usaremos o novo "
skullkid
55

Como Eric, usei homebrew, mas usei a receita padrão. Assim:

brew install mercurial
brew install vim

E depois de reiniciar o vim do homebrew do terminal deve ser o padrão. Se não, você deve atualizar seu $PATHpara que /usr/local/binseja antes /usr/bin. Por exemplo, adicione o seguinte ao seu .profile:

export PATH=/usr/local/bin:$PATH
Koen.
fonte
6
@Beau Incorreto, o homebrew tem uma fórmula para o vim: github.com/mxcl/homebrew/blob/master/Library/Formula/vim.rb
Koen.
Desculpe, minha culpa! A brew updaterealmente me devolveu uma fórmula para vim.
Beau
Corrigir vilinks simbólicos:[sudo] ln -sf /usr/local/bin/vim /usr/bin/vi
knight9631
Eu adicionei meu vilink simbólico a /usr/local/bin:ln -s /usr/local/bin/vim /usr/local/bin/vi
wisbucky
"E depois de reiniciar o vim do homebrew do terminal", foi quando de repente me ocorreu - preciso desligá-lo e ligá-lo novamente para que o novo vim funcione. Obrigado, cara
Peter Perháč,
7

Uma nota para a resposta de romainl: aliases não funcionam junto com sudo porque apenas a primeira palavra é verificada nos aliases. Para alterar isso, adicione outro alias ao seu .profile / .bashrc:

alias sudo='sudo '

Com essa mudança sudo vimvai se comportar conforme o esperado!

Jayeff
fonte
6

No Yosemite, instale o vim usando brewe a override-system-viopção. Isso irá instalar automaticamente o vim com os recursos de instalação 'enorme' do vim .

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

A saída deste comando mostrará onde o brew instalou o vim. Nessa pasta, vá até /bin/vimpara realmente executar o vim. Este é o seu comando para executar o vim de qualquer pasta:

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

Em seguida, crie um alias para esse comando adicionando a seguinte linha em seu .bashrc:

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

EDIT: O sinalizador de cerveja --override-system-vifoi descontinuado. Alterado para --with-override-system-vi. Fonte: https://github.com/Shougo/neocomplete.vim/issues/401

Privado
fonte
1
assim, você tem que atualizar o alias toda vez que atualizar o vim. Além disso, não é necessário adicionar o local exato como um alias, pois o vim adiciona automaticamente o binário a / usr / local / bin.
Flaudre
O sinalizador Brew --override-system-viestá obsoleto. Use --with-override-system-viinsted.
alhuelamo
@ahuelamo Você tem uma fonte? Em caso afirmativo, fique à vontade para editar e fonte. Obrigado
Particular de
@Private Bem, isso foi sugerido pela própria brew. Você também pode encontrá-lo aqui github.com/Shougo/neocomplete.vim/issues/401
alhuelamo
Adicionar o alias é redundante ao usar o sinalizador de substituição.
apostl3pol
1

brew install vim --override-system-vi

Toothrot
fonte
1
Não fornece nenhuma descrição ou referência sobre por que esse comando deve ser executado.
ngfgrant
1

Esta postagem do blog foi útil para mim. Usei a solução "Homebrew construído Vim", que no meu caso salvou a nova versão em / usr / local / bin. Nesse ponto, a postagem sugeria ocultar o vim do sistema, o que não funcionou para mim, então usei um alias.

$ brew install vim
$ alias vim='/path/to/new/vim
$ which vim
vim: aliased to /path/to/new/vim
kkelleey
fonte
1
Interessante. Eu tentei isso, mas a cerveja deve ter substituído o caminho automaticamente. Chamar vimparecia abrir o novo vim (depois de abrir um novo Terminal)
Dylanthepiguy
1
@Dylanthepiguy concordou, não há necessidade de criar um alias aqui se estiver usando homebrew. Iniciar um novo shell e re-sourcing meu bashrc no terminal existente funcionou para atualizar o comando vim para a nova versão homebrew.
kjones
1

Acabei de instalar o vim por:

brew install vim

agora o novo vim é acessado por vime o antigo vim (vim integrado) porvi

MIA
fonte