在 Mac 山猫 10.8 中从代码编译安装 vim

瞳人


发布于 Aug. 10, 2013, 8:20 p.m.

0 个评论

Home Brew MacOS Vim


在 Mac OS 山猫 10.8 中, 在使用 "brew install python" 安装python之后, 如何从代码编译安装vim?

我在安装过程中遇到一些问题, 所以记录下来. 我安装的是 vim 7.4.

友情提醒!! 一定要等看完全文再动手实践! 因为当中有些问题是在后面阐述的!

我在 Max OS X Mountain Lion 10.8 上根据 hackercodex 安装了 python 和 hg.

安装过程中我参考了 Building Vim from source, 但是安装是在 Ubuntu 下的.

我把vim的代码放在 ~/.mybuild/ 目录下:

1
mkdir -p ~/.mybuild && cd ~/.mybuild

然后克隆vim的工程:

1
2
hg clone https://code.google.com/p/vim/
cd vim

再次提醒!!! 请先看完文章, 因为在配置前需要对源代码做一些修改. 然后如下配置, 如果您不是使用 vim 7.4, 请确保 VIMRUNTIMEDIR 是正确的 (例如, 对于 vim7.3, 使用 /usr/local/share/vim/vim73):

1
2
./configure --with-features=huge --enable-rubyinterp --enable-pythoninterp --enable-perlinterp --enable-cscope --enable-multibyte
make VIMRUNTIMEDIR=/usr/local/share/vim/vim74

Vim 将被安装在 /usr/local/bin/, 我们可以看一下 vim 的代码配置文件或者输入命令 ./configure help. 一些选项主要在 src/auto/configure 文件中. 部分说明如下:

1
2
3
4
By default, 'make install' will install all the files in
'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc.  You can specify
an installation prefix other than '$ac_default_prefix' using '--prefix',
for instance '--prefix=\$HOME'.

并且该文件对 ac_default_prefix 进行了赋值:

1
ac_default_prefix=/usr/local

由于 python 是安装在 /usr/local, 我也想将 vim 安装在该目录下. 不需要设置 --with-python-config-dir, 因为从 configure 执行结果来看, 该路径是正确的:

1
2
3
4
5
6
7
checking --enable-pythoninterp argument... yes
checking for python2... /usr/local/bin/python2
checking Python version... 2.7
checking Python is 2.3 or better... yep
checking Python's install prefix... /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7
checking Python's execution prefix... /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7
checking Python's configuration directory... /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config

注意! 上述配置并不能完全起效, vim 使用的仍旧是系统的 python 而不是我们使用 brew 安装的 python. Google 好久之后找到了解决方案 solution!

我们查看源代码 ~/.mybuild/vim/src/auto/configure, 将如下行:

1
2
3
if test "x$MACOSX" = "xyes" && ${vi_cv_path_python} -c \
    "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
      vi_cv_path_python_plibs="-framework Python"

替换成:

1
2
3
if test "x$MACOSX" = "xyes" && ${vi_cv_path_python} -c \
    "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then
      vi_cv_path_python_plibs="-F /usr/local/Cellar/python/2.7.5/Frameworks -framework Python"

注意到您的系统上路径名可能不是

1
/usr/local/Cellar/python/2.7.5/Frameworks.

因为我使用 brew 安装 python, python 的 config.c 文件在

1
/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/.

如果您已经不小心已经执行了 configure 和 make, 请先执行 make clean (如有必要可能还需要执行 make distclean), 然后再重新 configure 和 make.

然后我们可以执行如下命令来安装, 不过我建议您先读完本文, 因为可能会遇到一些问题:

1
sudo make install

虽然直接安装能够通过, 并且 vim 似乎也是可以正确运行的. 但是我发现安装的过程中又几个错误. 不仔细的话你会发现不了:

1
sed: RE error: illegal byte sequence

我 google 了一个多小时, 只找到了解决方法, 但是没人解释这个问题. 所以先就这样解决吧.

执行 locale 命令如下结果:

1
2
3
4
5
6
7
8
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

这是因为我之前在 ~/.bash_profile 中加入了:

1
2
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

我注释了这两行, 然后重新打开一个终端, 执行 locale:

1
2
3
4
5
6
7
8
LANG=
LC_COLLATE="C"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

但是 LC_CTYPE 仍旧不对, 所以我们需要执行 export LC_CTYPE="C", 然后执行 locale:

1
2
3
4
5
6
7
8
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

现在我们可以执行 sudo make install 了, 可以发现没有error啦!

Enjoy your vim!

PS: 你最好恢复 ~/.bash_profile 中刚刚注释的那两行.


哎呦, 不错哦!

0 Comments


Leave a Comment:

博客搜索

友情链接

公告

本博客代码已经公布在 Github 上,欢迎交流指正。

QQ 邮箱对 mailgun 不太友好, 所以使用 QQ 邮箱的评论, 可能会无法及时收到邮件。我会尽快寻找其他解决方案的。

本人现在独自使用 linode vps, 20 美元/月, 感觉压力大, 如果有意一起合租, 可以联系我. 在我的任意一篇文章下面留言即可. 关于使用方式, 现在倾向于使用 docker.