Debian下Vim的编译

96
匿蟒
2016.02.11 13:41* 字数 1233

在我新安装的Debian v8.3中,自带一个简陋的Vim。

自带vi的version情况

这种惨不忍睹的feature支持,任何一个Vimer都是不可能忍受的。而apt安装的,也会有一些问题,比如不支持clipboard(想想Vim和系统剪切板不通的那些痛)。

因此,任何一个Vimer在配置新系统时,都需要从源码编译安装。

本文介绍从一个刚安装的Debian系统(窗口为gnome3),如何编译一个feature丰富的Vim(以及gVim)。

源码下载

确保Git已经安装(sudo apt-get install git),然后可以从GitHub上下载到最新源码。

git clone https://github.com/vim/vim.git
cd vim

编译准备

一个新的Debian系统是没有gcc的,需要安装build-essential

而编译Vim也需要额外的一个特殊库,否则会在编译时出现以下提示:

You need to install a terminal library; for example ncurses.

现在通常用libncurses5-dev来提供这项编译支持。

sudo apt-get install build-essential libncurses5-dev

这样,编译Vim可以正常完成了,简单使用./configure && make && sudo make install,就可以编译安装一个最新的Vim。但这只是个基础版本,仍然不支持很多feature,比如python。

编译参数

./configure -h中,可以看到许多的编译配置选项。

经过仔细研究后,我分行写到一个文件中。并且,在每次执行./configure之前,都清理上次配置的文件,避免干扰。反复执行这个文件,就可以反复编译Vim。(相信我,你一定会反复编译Vim的。)

make clean
git clean -fdx

./configure \
    --prefix=/usr/local/ \
    --with-features=huge \
    --enable-multibyte \
    --enable-cscope=yes \
    --enable-perlinterp=yes \
    --enable-rubyinterp=yes \
    --with-ruby-command=/usr/bin/ruby \
    --enable-luainterp=yes \
    --enable-pythoninterp=yes \
    --enable-python3interp=yes \
    --enable-tclinterp=yes \
    --enable-gui=auto \
    --enable-gnome-check \
    --enable-sniff \
    --enable-xim \
    --enable-fontset \
    --with-x \
    --with-compiledby=$USER
 
make && src/vim --version

简要解释下部分参数。
--with-features=huge是Vim必备的,要求最多的feature;
--enable-gui=auto是要求同时编译一个gVim,至于用什么图形库则取决于窗口(我是gnome3),这里选auto比较完全;
--enable-multibyte是对多字节语言支持,包括中文;
--prefix是指明安装目录,影响后面make install的位置,在没有root权限的环境下,可以选择--prefix=~/
--with-compiledby可有可无,那是指定编译显示的,用$USER则是调用用户名。

make后,编译开始。一般情况下都会编译成功,但是别高兴太早,编译Vim最大的坑来了!

src/vim --version看看新编译出来的Vim,不出意外地话,可以看到python、ruby、lua、clipboard等诸多feature都是减号,而且连gVim也没编译出来!

再次进入编译准备

上次编译准备,只是确保Vim的编译能正常完成,不能保证所需feature能够成功被编译。如果这些feature依赖的库没有被安装,那么编译成功后也是没有那个加号的。(不会编译失败或给出其它提示。)而且,第一次编译的小白、不明真相的群众(比如说以前的我),往往会认为是自己的编译配置有误,去改./configure后面的参数,然后屡受挫折、备受折磨(上次我直接跪安了)。

究竟哪些额外的库,对应哪些feature,是这个问题的难点,也是本文的最大价值。通过反复编译多次的尝试后,总结出了以下对应关系。

configure feature dependency
--enable-pythoninterp python python-dev
--enable-python3interp python3 python3-dev
--enable-rubyinterp ruby ruby-dev
--enable-luainterp lua liblua5.2-dev
--enable-perlinterp perl libperl-dev
--enable-tclinterp tcl libtcl8.6
--enable-gui gVim libgnomeui-dev
clipboard libx11-dev libxt-dev
xpm libxpm-dev

把它们都安装好,然后再去编译Vim,就可以成功了。

sudo apt-get install \
    python-dev \
    python3-dev \
    ruby-dev \
    liblua5.2-dev \
    libperl-dev \
    libtcl8.6 \
    libgnomeui-dev \
    libx11-dev \
    libxt-dev \
    libxpm-dev

编译安装

编译好的Vim信息

看到这一排排的加号,仿佛感到努力得到了回报。除了几个低频甚至不用的feature,比如ebcdic编码、sun_workshop、一些鼠标支持等,其它基本上都具备了。

(xfontset是一个遗憾,一开始都是可以的,添加了x那些库后反而就不行了。以后有用到再来。)

确认编译无误后,就可以执行sudo make install安装到之前指定的prefix了。我是在/usr/local/,所以不用在PATH里添加路径。

使用准备

先下载一个Vim的包管理器,我是用Vundle.vim,然后用它管理插件。

mkdir -p ~/.vim/bundle/
cd ~/.vim/bundle/
git clone https://github.com/VundleVim/Vundle.vim.git

然后进入Vim,用它下载其它插件。

此外,还有些环境需要给Vim准备,这些不会影响Vim的编译,但是会影响使用。

sudo apt-get install \
    exuberant-ctags \
    cscope \
    libcanberra-gtk-module

添加gVim进GNOME程序选择界面

调出alacarte界面(即Main Menu),在某个位置(我是在Programming)选择【New Item】。

名称(name)填gVim,命令(command)填gvim,注释(comment)随便填。图标那里可选系统的/usr/share/icons/hicolor/48x48/apps/vim.png,也可选编译位置的vim/runtime/vim48x48.png

添加gVim到Main Menu

此后就可以按Win(Super)键输入gVim来调用了。

Linux
Gupao