2015-04-08 16:28:24
来 源
中存储网
Ubuntu
前两天重装了Ubuntu 12.04,在安装gVim的时候发生了一些不爽的事情,主要还是输入法冲突问题,具体如下: 1.启动超慢 启动慢可以用gvim -f解决,但治标不治本,后面一块解决 2.占用一个终端 可以在后面加解决,但也不解决根本问题 自己获取vim源码,打补丁,

前两天重装了Ubuntu 12.04,在安装gVim的时候发生了一些不爽的事情,主要还是输入法冲突问题,具体如下:

1.启动超慢

启动慢可以用gvim -f解决,但治标不治本,后面一块解决

2.占用一个终端

可以在后面加“&”解决,但也不解决根本问题

自己获取vim源码,打补丁,编译安装vim

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表现才会和原来的完全一致。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。