Debian下Vim的编译

在我新安装的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来调用了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容