在Mac OS X上更新内置vim


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 2014年

Answers:


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 2014年

2
不,每个Mac OS X版本都相同。我刚打错字。谢谢。
romainl 2014年

@ fabian789:首先是因为它没有用,第二是因为软优于硬,第三是因为默认的Vim可以工作,如果出现问题,您可能已经无法正常使用Vim了,第四,系统升级可能会覆盖您的Vim,并且列表可能继续……
romainl 2014年

2
...或alias vim='mvim -v'。但是,这两种方法都无法sudo vim使用旧版本。我建议使用@RobertMartin的答案或程序包管理器。还有另外一个选择:此答案Slizzered上serverfault.com,它可以让你的别名传递给sudo
2014年

该回答说:“别名是交互式外壳的快捷方式;其他进程未使用它们。” stackoverflow.com/questions/37466767/… 因此,这对于说git difftool或无效git commit
jasonszhao 2016年

130

如果我对事情的理解正确,那么无论是好是,您都希望安装在现有的Vim上:-)这是一个坏主意,而且不是做到这一点的“干净”方法。为什么?好吧,OS X期望/ usr / bin中不会发生任何未知的变化,因此,每次在其中覆盖内容时,都可能会破坏一些复杂的相互依赖性。而且,假设您确实破坏了某些东西-无法“撤消”该损害。您会感到悲伤和孤独。您可能必须重新安装OSX。

第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时,我们将使用新的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在/ PATH中将/ usr / bin的优先级设置为比/ 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”以查看它们。我希望您在执行备份之前先做好备份,以防万一出问题....


嗯...我不知道该否投票...它回答了这个问题...但这是一个坏主意,没有解释原因...所以也许我应该投票否决?
2011年

很好的答案,但作为* nix初学者,我很好奇您为什么选择〜安装vim。此外,。/ configure ...行有什么作用?再次感谢。
AlexMA

@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 2014年

“!瞧现在,当我们使用vim我们将使用旧的。”我认为这是一个错字,你的意思是说:“我们将使用新的一个”
skullkid

55

像Eric一样,我使用自制软件,但使用默认配方。所以:

brew install mercurial
brew install vim

重启终端后,自制软件的vim应该是默认值。如果没有,你应该更新$PATH,以便/usr/local/bin为之前/usr/bin。例如,将以下内容添加到您的.profile

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

6
@Beau这是不正确的,自制软件确实具有vim的公式:github.com/mxcl/homebrew/blob/master/Library/Formula/vim.rb
Koen。

对不起,我的错!一个brew update确实给我带回一个公式活力。

修复vi符号链接:[sudo] ln -sf /usr/local/bin/vim /usr/bin/vi
knight9631

我将我的vi符号链接添加到/usr/local/binln -s /usr/local/bin/vim /usr/local/bin/vi
wisbucky

“然后重新启动终端自制软件的vim”,那突然让我震惊-我需要将其关闭然后重新打开,以使新vim正常工作。谢谢男人
PeterPerháč18年

7

romainl答案的注释:别名不能与sudo一起使用,因为在别名上仅检查了第一个单词。要更改此设置,请向.profile / .bashrc中添加另一个别名:

alias sudo='sudo '

进行此更改sudo vim将表现出预期的效果!


6

在优胜美地上,使用brewoverride-system-vi选项安装vim 。这将自动安装具有“巨大” 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"

编辑:--override-system-vi不推荐使用Brew标志。更改为--with-override-system-vi。资料来源:https : //github.com/Shougo/neocomplete.vim/issues/401


1
这样,您每次更新vim时都必须更新别名。另外,由于vim会自动将二进制文件添加到/ usr / local / bin,因此也不必添加确切的位置作为别名。
Flaudre '16

--override-system-vi现在不推荐使用Brew标志。使用--with-override-system-viinsted。
alhuelamo

@ahuelamo你有消息来源吗?如果是这样,请随时进行编辑和来源。谢谢
私人

@Private好吧,这是Brew自己建议的。您也可以在这里找到它github.com/Shougo/neocomplete.vim/issues/401
alhuelamo

使用替代标志时,添加别名是多余的。
apostl3pol

1

brew install vim --override-system-vi


1
没有给出关于为什么要运行此命令的描述或参考。
ngfgrant

1

这篇博客文章对我很有帮助。我使用了“自制软件内置的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同意,如果使用自制软件,则无需在此处创建别名。启动新的shell并在现有终端中重新打包bashrc都可以将vim命令更新为新的自制版本。
kjones

1

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

brew install vim

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.