前言
sublime很好用,但是ubuntu下不能輸入中文,這是一個很大的問題。不知道為什么開發着一直也不解決,好在還是有高手在,總能找到方法。網上方法很多,但是也很亂,現在我將自己的經驗總結一下。
首先,我參考了好幾篇文章,都是蠻不錯的,先列出來:
- sublime-text-imfix:首先推薦這個方法,最簡單,但是在我的系統上有些問題。可用這個的強烈推薦用這個
- 完美解決 Linux 下 Sublime Text 中文輸入:講的比較明白,也可用參考。
- Ubuntu下Sublime Text 3解決無法輸入中文的方法: 講解的最清楚了,建議看看。
我的方法
1.下載我們需要的文件,打開終端,輸入:
git clone https://github.com/lyfeyaj/sublime-text-imfix.git
2.將subl
移動到/usr/bin/
,並且將sublime-imfix.so
移動到/opt/sublime_text/
(sublime的安裝目錄)
終端輸入:
cd ~/sublime-text-imfix sudo cp ./lib/libsublime-imfix.so /opt/sublime_text/ sudo cp ./src/subl /usr/bin/
3.用subl
命令試試能不能啟動sublime,如果成功啟動的話,應該就可以輸入中文了。
終端輸入:
LD_PRELOAD=./libsublime-imfix.so subl
4.但是這樣子只能用上述命令行啟動才能輸入中文,我們需要更簡單的辦法,我選擇新建一個shell腳本,很簡單,就一句話。
sublime新建文件輸入:
#!/bin/bash LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so subl
然后將文件另存為sublime
(注意:沒有后綴),並且放到/home
文件夾。
5.至此,所有工作完成了。想要啟動,直接終端輸入:bash ~/sublime
,就可以啟動sublime,並且能夠輸入中文。
6.如果不需要輸入中文,直接按以前的方式打開即可。建腳本文件的目的就是方便打開能輸入中文的sublime。
說明
這只是一個權宜之計,完美的解決辦法還沒有,只能等sublime開發者更新。
網上所謂的完美解決,還是有問題,比如如果更改桌面快捷方式,那么sublime的Browse Packages
功能不能使用,當然,還有其他問題。為了正常使用,我就沒改。當然如果你中文輸入比較多,還是建議修改桌面快捷方式,畢竟那會方便很多,具體怎么樣,自己取舍。
另外,輸入法不跟框,暫時無解啊。
解決方法步驟2
-
保存下面的代碼到文件sublime_imfix.c(位於~目錄)
#include <gtk/gtkimcontext.h>
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);
g_object_set_data(G_OBJECT(context),"window",window);
if(!GDK_IS_WINDOW (window))
return;
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);
}
-
將上一步的代碼編譯成共享庫libsublime-imfix.so,命令
cd ~
gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
這一步也許需要
安裝 C/C++ 的編譯環境和 gtk libgtk2.0-dev
sudo apt-get install build-essential sudo apt-get install libgtk2.0-dev
-
然后將libsublime-imfix.so拷貝到sublime_text所在文件夾
sudo mv libsublime-imfix.so /opt/sublime_text/
-
修改文件/usr/bin/subl的內容
sudo gedit /usr/bin/subl
將
#!/bin/sh
exec /opt/sublime_text/sublime_text "$@"
修改為
#!/bin/sh
LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@"
此時,在命令中執行 subl 將可以使用搜狗for linux的中文輸入
-
為了使用鼠標右鍵打開文件時能夠使用中文輸入,還需要修改文件sublime_text.desktop的內容。
命令
sudo gedit /usr/share/applications/sublime_text.desktop
將[Desktop Entry]中的字符串
Exec=/opt/sublime_text/sublime_text %F
修改為
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text %F"
將[Desktop Action Window]中的字符串
Exec=/opt/sublime_text/sublime_text -n
修改為
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text -n"
將[Desktop Action Document]中的字符串
Exec=/opt/sublime_text/sublime_text --command new_file
修改為
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text --command new_file"
注意:
修改時請注意雙引號"",否則會導致不能打開帶有空格文件名的文件。
此處僅修改了/usr/share/applications/sublime-text.desktop,但可以正常使用了。
opt/sublime_text/目錄下的sublime-text.desktop可以修改,也可不修改。
-
經過以上步驟我們能在Sublime中輸入中文了。