更新Mac OS X上内置的vim

115

我知道这个问题更适合在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
通常来说,我认为最好不要乱动苹果安装的部分,而是使用macports/homebrew等工具或者自己构建并将其安装在/usr/local/中。这样做不会占用太多空间。 - steveax
您可以在此处下载最新的MacVim快照:https://github.com/b4winckler/macvim/releases。 - lfender6445
8个回答

137
如果我理解正确,您想在现有的Vim上安装,好或坏 :-) 这是一个糟糕的主意,也不是“干净”的方法。为什么呢?嗯,OS X希望在/usr/bin中没有任何东西会被更改,所以每当您覆盖其中的内容时,都会冒着破坏某些复杂相互依赖性的风险。而且,假设您确实破坏了某些内容——没有办法“撤消”那种损害。那你将会很伤心和孤单。您可能需要重新安装OS X。

Part 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/bin 中的二进制文件时安装到 /usr/local/bin,因为默认情况下,OS X 将 /usr/bin 放在 $PATH 中的优先级高于 /usr/local/bin,并且搞乱它会带来自己的问题... 所以,这就是你应该做的。

第二部分: “正确”答案(但是不好的主意)

假设你已经决定这样做了,那么你肯定在正确的轨道上。要在当前安装的基础上进行安装,需要设置“前缀”目录。方法如下:

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”传递一些其他选项。执行“./configure --help”命令以查看它们。不过,在执行该操作之前,我希望你已经备份好文件,以防出现问题....


非常好的答案,但作为一个*nix初学者,我很好奇为什么你选择用~安装vim。 另外,那个./configure...行是做什么的? 再次感谢。 - AlexMA
@AlexMA 把源代码放在 ~,也就是你的主目录下,完全是任意的。随意将其下载到任何你想要的地方。一旦安装完成,你也可以删除该目录(此时源代码不再必要)。 - Robert Martin
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
我使用了以下命令:./configure --with-features=huge \ --enable-multibyte \ --enable-rubyinterp=yes \ --enable-pythoninterp=yes \ --with-python-config-dir=/usr/lib/python2.7/config \ --enable-python3interp=yes \ --with-python3-config-dir=/usr/lib/python3.5/config \ --enable-perlinterp=yes \ --enable-luainterp=yes \ --enable-gui=gtk2 --enable-cscope --prefix=/opt/local ,以避免 Python 不兼容的错误。 - Shoeb Ahmed Mogal
显示剩余4条评论

122

不要覆盖内置的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 - zxqx
2
不是的,在每个Mac OS X版本上都是一样的。我只是打错了。谢谢。 - romainl
@fabian789:首先,因为它是无用的;其次,软件比硬件更好;第三,Vim的默认设置就可以工作,如果出了问题,你可能会没有一个可用的Vim;第四,系统升级可能会覆盖你的Vim,而且这个列表可能还会继续下去... - romainl
2
...或者alias vim='mvim -v'。但是这两种方法在使用旧版本的sudo vim时都会失败。我建议使用@RobertMartin的答案或一个包管理器。还有另一种选择:这个答案来自于serverfault.com上的Slizzered,它允许您将别名传递给sudo - Brian McCutchon
“别名是交互式 shell 的快捷方式;它们不被其他进程使用。”这个答案说。https://dev59.com/Opffa4cB1Zd3GeqP8HMA 因此,对于 git difftoolgit commit 等命令无效。 - user2486953
@jasonszhao,确实最好直接配置Git以使用所需的命令。 - romainl

58

和Eric一样,我也使用Homebrew,但我使用的是默认配方。所以:

brew install mercurial
brew install vim

重启终端后,Homebrew 的 Vim 应该是默认的。如果不是,请更新您的$PATH,使得/opt/homebrew/bin/usr/bin之前。例如,在您的.profile中添加以下内容:

export PATH=/opt/homebrew/bin:$PATH

注意:早期版本的 Homebrew 安装到了 /usr/local,因此在这种情况下,您必须使用 /usr/local/bin 而不是 /opt/homebrew/bin

6
@Beau 这不正确,Homebrew确实有一个vim的配方:https://github.com/mxcl/homebrew/blob/master/Library/Formula/vim.rb - Koen.
抱歉,是我的错!执行 brew update 命令后,确实给我返回了 vim 的配方。 - Beau
修复 vi 符号链接:[sudo] ln -sf /usr/local/bin/vim /usr/bin/vi - Yaohui.W
我将我的 vi 符号链接添加到 /usr/local/bin 目录下:ln -s /usr/local/bin/vim /usr/local/bin/vi - wisbucky
在重启终端 Homebrew 的 Vim 后,我突然意识到 - 我需要关闭并重新打开它,以便新的 Vim 能够正常工作。谢谢。 - Peter Perháč
我忘记重启iTerm2以使homebrew的vim成为默认设置。非常感谢。 - Pathros

7
一份给romainl答案的注释:由于别名仅检查第一个单词,因此别名与sudo不兼容。要更改,请在.profile / .bashrc中添加另一个别名:

alias sudo ='sudo'

使用此更改,sudo vim将按预期运行!


6
在Yosemite上,使用brewoverride-system-vi选项安装vim。这将自动安装具有“huge” 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"

编辑:Brew标志--override-system-vi已被弃用。已更改为--with-override-system-vi。来源:https://github.com/Shougo/neocomplete.vim/issues/401


1
你需要在每次更新vim时更新别名。此外,不必将确切位置添加为别名,因为vim会自动将二进制文件添加到/usr/local/bin。 - flaudre
Brew标志“--override-system-vi”现已被弃用。请改用“--with-override-system-vi”。 - alhuelamo
@ahuelamo 你有来源吗?如果有,请随意编辑并注明出处。谢谢。 - Private
@私有的 好的,那是brew自己建议的。您也可以在这里找到它 https://github.com/Shougo/neocomplete.vim/issues/401 - alhuelamo
使用覆盖标志时添加别名是多余的。 - apostl3pol
你测试过了吗? - Private

1

这篇博客文章对我很有帮助。我使用了"Homebrew构建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,则无需在此处创建别名。 启动新的shell和重新加载现有终端中的bashrc文件都可以更新vim命令为新的homebrew版本。 - kjones

1
安装 Vim 并覆盖系统自带的 Vi:

brew install vim --override-system-vi


1
该命令没有说明或参考,无法解释为何应该运行它。 - ngfgrant

1

我刚刚通过以下方式安装了vim:

brew install vim

现在新的 Vim 可以通过 vim 访问,而旧的 Vim(内置的 Vim)可以通过 vi 访问。


在打开一个新的终端之后,对我起作用了。 - LinusR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接