在我新安装的Debian v8.3中,自带一个简陋的Vim。
这种惨不忍睹的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
编译安装
看到这一排排的加号,仿佛感到努力得到了回报。除了几个低频甚至不用的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
。
此后就可以按Win(Super)键输入gVim来调用了。