我的系统版本ubuntu12.04
老实说,作为linux刚入门的菜鸟真的经不起折腾,问题总是接连不断的出现也是醉了。
从头开始记录一下吧
下载安装配置sublime
下载下来后,发现后缀名不是gz的,tar zvxf解压不了。。网上说用tar vxf可以解压,具体我也没试,直接双击解压了。
解压后,文件夹名称带空格的,重命名一下,不然会影响到后面的步骤。
重命名指令 mv Sublime Text 2 sublimeText2
然后打开文件夹找到一个可执行文件,名称叫sublime_text
直接在该文件夹下面输入 ./sublime_text Test.java
就可以运行sublime了。
为了能在其他地方能够运行sublime,有以下2个方式:
- 配置环境变量
- 直接创建一个快捷方式到/usr/bin里面
配置环境变量就不说了,我们用第二种吧。
ln -s sublime安装路径/sublime_text /usr/bin/sublime
先不用急着配这个,后面是要替换的
以上做法相当于在/usr/bin下面创建了一个快捷方式,名称叫sublime,这个名称可以随便取。
然后再在终端任何地方,直接sublime AA.java就OK了。
上面说的这种方式弄清楚了,对后面的解决方式就好理解了
然后问题就来了,发现怎么输入不了中文,怎么切换都切换不了,ubuntu下默认的ibus有问题。
网上给出了很多解决办法,有的说直接装fcitx可以解决,于是我就装了,结果确实可以,但是打错一个字删都删不了,必须要打出来才能删。
坑啊!!于是想着还是装搜狗输入法吧。
下载安装搜狗输入法
搜狗输入法下载地址
点击对于的32位还是64位后会有对应帮助页面
照着上面的帮助页面进行操作
上面给的操作有些地方有出入,下面是我的操作
- 输入alt+F2打开搜索窗口,就是左上方那个Dash
- 输入‘更新’,查询更新的那个软件
- 点击 ‘设置’>’其他软件’>’添加’>’在弹出的窗口中输入ppa:fcitx-team/nightly‘
- 在要更新的软件源里面右键,全部不选,然后找到其他软件那3个,对上面添加的那几个安装上就好了
- 后面就是步骤见帮助页面
注意!第三,四步不执行的话,后面下载完fcitx后,双击deb包会提示fcitx版本过低的,安装不了搜狗
安装完成后立马就遇到一个问题,一切换搜狗输入法,直接一个弹窗’搜狗面板程序加载失败,请重启以使用输入法!‘,我们就重启一下就好了。
给sublime添加中文支持
- 新建一个文件sublime_imfix.c,然后将下面这段代码copy进去
/* sublime-imfix.c Use LD_PRELOAD to interpose some function to fix sublime input method support for linux. By Cjacker Huang <jianzhong.huang at i-soft.com.cn> gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC LD_PRELOAD=./libsublime-imfix.so sublime_text */ #include <gtk/gtk.h> #include <gdk/gdkx.h> typedef GdkSegment GdkRegionBox; struct _GdkRegion { long size; long numRects; GdkRegionBox *rects; GdkRegionBox extents; }; GtkIMContext *local_context; void gdk_region_get_clipbox (const GdkRegion *region, GdkRectangle *rectangle) { g_return_if_fail (region != NULL); g_return_if_fail (rectangle != NULL); rectangle->x = region->extents.x1; rectangle->y = region->extents.y1; rectangle->width = region->extents.x2 - region->extents.x1; rectangle->height = region->extents.y2 - region->extents.y1; GdkRectangle rect; rect.x = rectangle->x; rect.y = rectangle->y; rect.width = 0; rect.height = rectangle->height; //The caret width is 2; //Maybe sometimes we will make a mistake, but for most of the time, it should be the caret. if(rectangle->width == 2 && GTK_IS_IM_CONTEXT(local_context)) { gtk_im_context_set_cursor_location(local_context, rectangle); } } //this is needed, for example, if you input something in file dialog and return back the edit area //context will lost, so here we set it again. static GdkFilterReturn event_filter (GdkXEvent *xevent, GdkEvent *event, gpointer im_context) { XEvent *xev = (XEvent *)xevent; if(xev->type == KeyRelease && GTK_IS_IM_CONTEXT(im_context)) { GdkWindow * win = g_object_get_data(G_OBJECT(im_context),"window"); if(GDK_IS_WINDOW(win)) gtk_im_context_set_client_window(im_context, win); } return GDK_FILTER_CONTINUE; } void gtk_im_context_set_client_window (GtkIMContext *context, GdkWindow *window) { GtkIMContextClass *klass; g_return_if_fail (GTK_IS_IM_CONTEXT (context)); klass = GTK_IM_CONTEXT_GET_CLASS (context); if (klass->set_client_window) klass->set_client_window (context, window); if(!GDK_IS_WINDOW (window)) return; g_object_set_data(G_OBJECT(context),"window",window); int width = gdk_window_get_width(window); int height = gdk_window_get_height(window); if(width != 0 && height !=0) { gtk_im_context_focus_in(context); local_context = context; } gdk_window_add_filter (window, event_filter, context); }
在终端输入下面指令编译上面的代码
gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
我在第二部这里又出了一个问题
No package ‘gtk+-2.0’ found (PKG_CONFIG_PATH问题)
然后我去/usr/bin里面查看了一下,我确实没有gtk,
于是我百度了一下安装指令apt-get install libgtk2.0-dev
然后运行安装指令进行gtk的安装在终端输入
LD_PRELOAD=./libsublime-imfix.so sublime
运行
上面操作后发现,确实可以输入中文了,可是我得正常编辑,总不能每次都用LD_PRELOAD然后一大串地址吧。
于是我考虑到可以通过写一个sh脚本,然后把它用最开始的快捷方式链接的方式去实现直接输入sublime XX.java就能输入中文。
- 编写简单的shell ,取名custome_sublime
大家注意好上面的地址替换成你自己的安装地址#!/bin/bash LD_PRELOAD=/home/linuxv/software/sublimeText2/libsublime-imfix.so /home/linuxv/software/sublimeText2/sublime_text "$1"
上面的”$1”是用来代表命令执行的时候后面跟的第一个参数,主要用来代替使用sublime时后面跟的文件命 ‘T.java,B.java’等
一开始没想到用”$1”参数,结果每次启动都是一个新的框,根本编辑不了某一个文件。 将编写的sh脚本变成可执行文件
chmod +x custome_sublime
然后将该可执行文件ln到/usr/bin里面
ln -s sublime安装路径/custome_sublime /usr/bin/sublime
OK,搞定了~
附上我文件的显示图供大家参考: