前两天重装了Ubuntu 12.04,在安装gVim的时候发生了一些不爽的事情,主要还是输入法冲突问题,具体如下:
1.启动超慢
启动慢可以用gvim -f解决,但治标不治本,后面一块解决
2.占用一个终端
可以在后面加“&”解决,但也不解决根本问题
一个不错的方法是参考网上一大哥的办法,自己获取vim源码,打补丁,编译安装vim:http://www.linuxidc.com/Linux/2013-01/77314p2.htm
3.打补丁之后还是有问题,每次退出后会输出一堆错误:
(gvim:28478): Gdk-WARNING **: Using Cairo rendering requires the drawable argument to
have a specified colormap. All windows have a colormap,
however, pixmaps only have colormap by default if they
were created with a non-NULL window argument. Otherwise
a colormap must be set on them with gdk_drawable_set_colormap
(gvim:28478): Gdk-CRITICAL **: IA__gdk_cairo_region: assertion `region != NULL’ failed
(gvim:28478): Gdk-CRITICAL **: IA__gdk_cairo_region: assertion `region != NULL’ failed
原因:输入法冲突 (之前已经卸载ibus装了fcitx,还是不行)
解决:由于fcitx-frontend-gtk2和gvim冲突造成的错误,可以通过sudo apt-get remove fcitx-frontend-gtk2解决。
之后问题解决,而且fcitx还能用!
对于我这样的vim党来说,Ubuntu 12.04有一个非常讨厌的问题,就是在terminal里执行gvim命令的时候会挂起。使得gvim根本无法正常使用。据猛禽说这个问题已经持续了几个版本了,不知道为什么到今天都得不到解决。
在ubuntu的bug track上给出了一个workround , 就是用gvim -f 代替 gvim。当然,我表示这种使用方法非常的不爽。
今天猛禽也遇到类似的问题了,我就想干脆找找看有没有彻底解决问题的方法。幸运的是,还真有。
这个帖子就对这个问题提出了讨论。然后有人给出了一个patch,据说能解决这个问题。
虽然很不想在Ubuntu下自己编译软件,不过抱着试试看的态度,我加上了那个patch之后编译了一下,还真是成功了。
在这里把编译步骤记录一下。
首先安装vim的编译依赖:
sudo apt-get build-dep vim
然后去获取vim的源码:
hg clone https://vim.googlecode.com/hg/ vim
当然了,上面那一步需要事先安装mercurial,这个很简单,就不说了。
然后把上面那个patch抓到vim目录(就是项目的根目录)里来。
cd vim wget https://raw.github.com/gist/2576464/dcbc773312b1488f00eb8b8cb24dd74983349d89/fix-gui-gtk-fork-issue.diff
我个人觉得不是用于开发目的的话,直接编译主线代码不太好。所以先切换到某一个tag做编译比较好。一般当然是用最新的那个tag。
先用
hg tags | head
查询一下当前tags,比如我这里最新的是 v7-3-515
再用
hg update v7-3-515
切换到指定的tag。
然后开始打补丁:
patch src/gui.c fix-gui-gtk-fork-issue.diff
打完补丁之后当然应该去确认一下代码,看看补丁代码是不是已经在了,更简单的方法是直接用 hg diff 确认。这个也不细说了。
假设补丁已经正确打上。那接下来就是很熟悉的编译步骤了。不过这里要注意的是,默认的编译选项好像不行,至少要加上 –with-features=huge 才能使补丁生效。这个部分我没有深究,有兴趣的可以看看为什么。
我用的编译选项是:
./configure --enable-pythoninterp --enable-cscope --enable-multibyte --with-features=huge --with-compiledby=ch.linghu@gmail.com
configure完成之后就是 make 和 make install,这个没什么好说了的吧?
安装完成之后的程序在 /usr/local/bin 里,正常情况下会优先使用。可以用 gvim –version 确定一下(看版本号和编译者以及编译时间)。
编译安装完成之后,再执行gvim,应该是没有问题了。(至少我这里已经正常了)
Update:
这样编译出来的vim无法读取Ubuntu系统原有的系统配置,需要做一个软链接:
ls -n /usr/share/vim /usr/local/share/vim
这样编译版的vim表现才会和原来的完全一致。