Fcitx

出自 Arch Linux 中文维基

Fcitx (Flexible Input Method Framework) ──即小企鵝輸入法,它是一個以 GPL 方式發佈的輸入法平台,可以通過安裝引擎支持多種輸入法,支持簡入繁出,是在 Linux 作業系統中常用的中文輸入法。它的優點是,短小精悍、跟程序的兼容性比較好。

安裝[編輯 | 編輯原始碼]

安裝軟件包 fcitx

輸入法引擎[編輯 | 編輯原始碼]

Fcitx 內置的輸入法支持中文 拼音 和基於字符表的輸入(例如五筆)。根據語言的不同,可以選擇其他輸入法引擎。

中文[編輯 | 編輯原始碼]

在 Fcitx 支持的拼音輸入法中,內置拼音響應速度最快。Fcitx 同樣支持流行的第三方拼音輸入法以提供更好的整句輸入效果。

日文[編輯 | 編輯原始碼]

  • fcitx-mozc, 為 Fcitx 添加 mozc (日語) 輸入引擎支持,mozc 是 Google 日語輸入法的開源版本。
  • fcitx-kkc, 一款新的基於 libkkc 的日文假名與漢字輸入引擎。
  • fcitx-skk, 一款基於 libskk 的日文假名與漢字輸入引擎。
  • fcitx-anthy, 為 Fcitx 添加 anthy (日語) 輸入引擎支持。

其它語言[編輯 | 編輯原始碼]

  • fcitx-hangul, 為 Fcitx 添加 hangul (韓語) 輸入引擎支持。
  • fcitx-m17n, 為 Fcitx 添加 m17n (多國語言碼表) 輸入引擎支持。
  • fcitx-unikey, 為 Fcitx 添加 unikey (越南語) 輸入引擎支持。
  • fcitx-sayura, 為 Fcitx 添加 sayura (僧伽羅語) 輸入引擎支持。

輸入法模塊[編輯 | 編輯原始碼]

Fcitx 提供對 Qt 提供了輸入法模塊,請根據需要安裝, fcitx-qt4AURfcitx-qt5. 軟件包組 fcitx-im包組 包含了全部模塊。如果沒有安裝對應的模塊,一般還是可以在大部分程序中使用輸入法的。不過很可能出現從無法光標跟隨、無法顯示預編輯字符串、無法輸入甚至程序卡死等情況。

某些程序不使用 Qt 的輸入法模塊,這些程序包括:

  • 使用 Tk, motif, 甚至 xlib 的程序
  • Emacs、Opera、OpenOffice、LibreOffice、Skype、Wine、Java、Xterm、urxvt、WPS

其它[編輯 | 編輯原始碼]

  • fcitx-ui-light, Fcitx 的輕量 UI。
  • fcitx-table-other, Fcitx 的一些更奇怪的碼表支持,包括 Latex, Emoji, 以及一大堆不明字符等等。

您還可以在 Arch User Repository 找到更多以上軟件包的 Git 版以及其它。

使用[編輯 | 編輯原始碼]

桌面環境下自動啟動[編輯 | 編輯原始碼]

如果您用 XDG 兼容的桌面環境,比如 KDE, GNOME, Xfce, LXDE, 那麼當您安裝好 Fcitx 並重新登錄後,Fcitx 應該會自動啟動。如果沒有的話,可以打開控制台並運行fcitx。為檢驗 Fcitx 是否正常運行, 打開一個程序,比如 leafpad, 按 CTRL+Space 激活 Fcitx 並試着輸入幾個字。

如果 Fcitx 沒有隨桌面環境自動啟動,或者您想修改下 Fcitx 啟動參數,請用桌面環境提供的自動啟動工具配置,或者直接編輯用戶目錄~/.config/autostart/ 下的 fcitx-autostart.desktop 文件以確認自動啟動是否被禁用。如果用戶目錄下的文件並不存在,您可以複製自動啟動文件 /etc/xdg/autostart/fcitx-autostart.desktop 到用戶目錄:

cp /etc/xdg/autostart/fcitx-autostart.desktop ~/.config/autostart/

如果您使用的桌面環境並不自動支持 XDG 自動啟動, 請在您使用的啟動腳本裏面添加 fcitx 以實現自動啟動。

例如,你使用i3sway窗口管理器,可以在配置文件中添加exec --no-startup-id fcitx來自動啟動輸入法。

當 iBus 等其它輸入法程序同時啟動且開啟了 Xim 支持時, 可能導致 Fcitx 無法啟動,請確保已禁用了其它輸入法程序的自動啟動。

設置輸入法的環境變量[編輯 | 編輯原始碼]

請按以下方式設置環境變量,如果沒有這些環境變量,程序可能默認使用 XIM 協議。qt5 程序不支持 XIM 所以必須配置使用 IM 模塊,其它程序也有可能出現問題。

建議通過 /etc/environment 設置環境變量pam-env 模塊會在所有登錄會話中讀取此文件,包括 X11 會話和 Wayland 會話。詳情請參考 man 8 pam-env

/etc/environment
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
注意: pam-env 已不再讀取 ~/.pam_environment 文件。

部分登錄管理器(如 LightDM)也支持讀取 ~/.xprofile,可以這樣設置:

~/.xprofile
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

重新登錄後讓環境變量生效。

如果 fcitx 沒有自動啟動,請將 fcitx & 加入 ~/.xinitrc, 如果 fcitx & 不啟動,在後面加一個延時 sleep 2

  • 請不要在 .bashrc 設置這些環境變量。bashrc只應用於交互性 bash 會話的初始化,並不應用於非交互性腳本或 X 會話的初始化。
  • 如果 Qt 使用 fcitx 有問題,請執行 qtconfig (qtconfig-qt4),在輸入法配置中將 fcitx 設置為 "Default Input Method"。

Xim[編輯 | 編輯原始碼]

要在 Gtk/Qt 程序中用 xim, 請將上面的變量改成如下的值:

GTK_IM_MODULE DEFAULT=xim
QT_IM_MODULE  DEFAULT=xim
警告: 使用 xim, 很可能會遇到一些包括不能輸入, 沒有光標跟隨, 重啟輸入法時應用程式卡死在內的無法由 Fcitx 解決的問題,且官方不支持解決。

重新登錄後讓環境變量生效。

注意: Gtk2 從 2.24.20 開始,使用 /usr/lib/gtk-2.0/2.10.0/immodules.cache 作為緩存文件。如果設置了 GTK_IM_MODULE_FILE 環境變量或在安裝後修改了配置,請清掉環境變量並使用 /usr/bin/gtk-query-immodules-2.0 --update-cache 更新緩存。Qt5 程序不支持 XIM 所以必須配置使用 IM 模塊

配置[編輯 | 編輯原始碼]

配置工具[編輯 | 編輯原始碼]

Fcitx 提供了若干圖形界面的配置程序:KDE 中的 kcm-fcitx, 基於 GTK+3 的 fcitx-configtool

安裝完配置工具fcitx-configtool之後打開配置工具的方法是用終端運行fcitx-config-gtk3,打開這個配置工具之後還要添加中文輸入法。對於新安裝的英文系統,要取消只顯示當前語言的輸入法(Only Show Current Language),才能看到和添加中文輸入法(Pinyin, Libpinyin等)。

如果要手工編輯 fcitx 的配置文件,請確保系統中並沒有在運行 fcitx ,否則手工編輯的配置內容可能丟失。

替換自帶的經典界面[編輯 | 編輯原始碼]

Fcitx 支持使用 kimpanel 協議的界面,以提供更好的桌面整合體驗。

  • Gnome-Shell:安裝 gnome-shell-extension-kimpanel-gitAUR, 它提供了類似 ibus-gjs 的用戶體驗,其候選框界面將會採用 Gnome-Shell 的主題風格, 同時在狀態欄中增加 Fcitx 的輸入法狀態圖標。
  • KDE:kimtoy 可以使用搜狗輸入法和 Fcitx 本身的皮膚。

輸入法[編輯 | 編輯原始碼]

您可以在配置界面工具中添加/移除啟用的輸入法。在輸入法圖標上右鍵可以打開配置。

列表第一項將作為「未激活」狀態使用,請將此項設為鍵盤佈局輸入法,比如「(鍵盤 - 英文)」,第一項後面的輸入法都是活動輸入法。。

警告: 請必須將鍵盤佈局輸入法設為列表中第一項, 否則可能會無法禁用中文輸入。

全局配置中, 觸發輸入法 快捷鍵僅在未激活輸入法及最後一個活動輸入法之間切換。切換輸入法 快捷鍵默認僅在不同的活動輸入法間切換,但是在高級設置中可以將非激活輸入法加入切換選擇。切換輸入法 快捷鍵需要按順序按下,例如 ALT_SHIFT 僅在先按 alt 再按 shift 後生效。

擴充內置拼音詞庫[編輯 | 編輯原始碼]

用戶配置拼音詞庫在 ~/.config/fcitx/pinyin, 其中 pybase.mb 為拼音單字庫,pyphrase.mb 為拼音詞庫。如果這兩文件並不存在,直接將您下載的詞庫放置到 /usr/share/fcitx/pinyin. 重啟 Fcitx 即可。

皮膚[編輯 | 編輯原始碼]

下載皮膚並解壓縮到下面任一目錄,如果沒有可以新建目錄:

/usr/share/fcitx/skin   ##全局设置
~/.config/fcitx/skin    #特定用户设置

雲拼音[編輯 | 編輯原始碼]

安裝後重啟 Fcitx 即可,所選的雲拼音輸入結果會自動添加到當前輸入法的詞庫中。提醒:建議在fcitx設置裏面將「雲拼音來源」由Google改為「百度」,Google國內訪問不是很順暢。

啟用雲拼音後,從雲拼音獲得的候選詞會默認添加到候選詞列表中的第二個,顯示位置可以通過雲拼音的設置配置。如果雲拼音的結果和本地輸入法給出的結果一致,雲拼音後選項會和本地產生的候選項自動合併,不會產生重複的候選項。

若安裝fcitx-cloudpinyin後,在配置程序裡卻沒有看見雲拼音,記得勾上「高級」複選框。這時雲拼音會顯示出來,再勾上雲拼音。

注意: 不推薦將雲拼音候選詞設為第一個候選詞,因為當網絡情況不好,沒有及時返回雲拼音結果,那麼雲拼音結果將默認降到第二候選詞的位置,於是這個過程可能會涉及到默認候選詞的改變。

提示與技巧[編輯 | 編輯原始碼]

快捷鍵[編輯 | 編輯原始碼]

部分常用默認快捷鍵:

  • Ctrl+Space 激活輸入法
  • Shift 臨時切換到英文
  • Ctrl+Shift 輸入法間切換
  • -/= 向前/向後翻頁
  • Shift+Space 全形、半角切換
注意: 您可以在配置界面的全局配置中修改這些快捷鍵。

Vim[編輯 | 編輯原始碼]

如果您經常在 Vim 下使用 Fcitx, 可以安裝 vim-fcitxAUR 插件,或者在 ~/.vimrc 添加如下代碼。以退出插入模式時,自動關閉 Fcitx, 反之則反:

"##### auto fcitx  ###########
let g:input_toggle = 1
function! Fcitx2en()
   let s:input_status = system("fcitx-remote")
   if s:input_status == 2
      let g:input_toggle = 1
      let l:a = system("fcitx-remote -c")
   endif
endfunction

function! Fcitx2zh()
   let s:input_status = system("fcitx-remote")
   if s:input_status != 2 && g:input_toggle == 1
      let l:a = system("fcitx-remote -o")
      let g:input_toggle = 0
   endif
endfunction

set ttimeoutlen=150
"退出插入模式
autocmd InsertLeave * call Fcitx2en()
"进入插入模式
autocmd InsertEnter * call Fcitx2zh()
"##### auto fcitx end ######
注意: 由於要調用外部程序,這將明顯拖慢會反覆進出插入模式的映射。建議改寫相關映射,用帶 Python 支持的 Vim 加以配合 fcitx.vim 亦可改善效率。

剪貼板[編輯 | 編輯原始碼]

Fcitx 自帶剪貼板,其快捷鍵為 Ctrl + ;, 小小功能拯救世界。

特殊符號[編輯 | 編輯原始碼]

創建 ~/.config/fcitx/data/pySym.mb, 文件內容示範如下:

 #第一个字符为“#”的行是注释
 #格式:编码 符号
 #编码只能为小写字母,经拼音解析后最长为10(如py为2,pinyin也为2)
 #数学符号
 sxfh +
 sxfh -
 sxfh <
 sxfh =
 sxfh >
 sxfh ±
 sxfh ×
 sxfh ÷
 sxfh ∈
 sxfh ∏
 sxfh ∑
 sxfh ∕
 sxfh √
 sxfh ∝

直接輸入某編碼,可以匹配出對應的特殊符號。

注意: 編碼只能用二十六個小寫字母表示;以 v 開頭,無效。

快速輸入[編輯 | 編輯原始碼]

確保在 ~/.config/fcitx/config 裡把 SemiColonAction 修改為 QuickPhrase

創建 ~/.config/fcitx/data/QuickPhrase.mb, 文件內容示範如下:

 #第一个字符为“#”的行是注释
 #格式:编码 符号
 dianhua 123456789
 youbian 123456
 dizhi 中华人民共和国北京市长安街一号
 aowu ┗<(=`O′=)>┛ 
 mobai m<(_ _)>m 
 baobao <(=′▽')爻 (`▽`=)> 
 baobao <(=*′д`)爻(′д`*=)> 
 qiangbi ▄︻┻┳═一…… ☆<(= ̄□ ̄=!)>
 xiaoku 😂
 canyue 🌖
 xuehua ❄

; 並輸入編碼,可實現快速輸入,自然也能用來當 顏文字庫emoji表情庫

注意: 編碼除了不得有空格,不得以 ; 開頭之外,沒有其它限制。

fcitx-remote[編輯 | 編輯原始碼]

fcitx-remote 是可以控制 fcitx 狀態的命令行工具,位於 fcitx 安裝包中。

常見的應用包括用 fcitx-remote -s imname, 將輸入法切換到 imname。要獲得正確的 imname,執行 fcitx-diagnose 並查看 "## Input Methods:" 對應的輸出。

通過 Fcitx 輸入特殊字符[編輯 | 編輯原始碼]

參見:Fcitx5#通過 Fcitx5 輸入特殊字符。該內容同樣適用於 Fcitx

故障排除[編輯 | 編輯原始碼]

停用或修改 Extra key for trigger input method[編輯 | 編輯原始碼]

設置位於 全局配置 標籤,默認是 SHIFT, 也就是說兩邊的 shift 鍵都會修改輸入法。這個設置可能在輸入大寫字母的時候引起誤觸,而且可能會在安裝後恢復成默認值。要確保進行的修改沒有被覆蓋,請設置配置文件為只讀:# chattr +i ~/.config/fcitx/config

首先診斷問題所在[編輯 | 編輯原始碼]

當你遇到任何 fcitx 有關的問題,比如 ctrl+space 在有的程序中不能工作,首先應該用 fcitx-diagnose 命令診斷問題的原因。 fcitx-diagnose 會列出所有 fcitx 正常運行所需的前提條件,從輸出結果中通常可以找到問題的原因。 在網上(比如在 irc 或者論壇裡)詢問別人關於 fcitx 配置的問題時,也請首先提供你的 fcitx-diagnose 輸出結果(比如貼到 pastebin 服務),這將加速別人幫你找到問題所在。

Emacs 無法使用輸入法[編輯 | 編輯原始碼]

emacs會找出一份字體列表發送給輸入法,以便輸入法繪製輸入框。 那麼會出現兩種情況:

  • 1.找不到字體

emacs 默認 fontset 會使用 "-*-*-*-r-normal--14-*-*-*-*-*-*-*" 字體 (terminus, 75dpi 等等,可以通過 xlsfonts 命令查看)。

解決方法:安裝xorg-mkfontscale重啟, 它將創建字體文件索引。通過 xlsfonts 命令查看是否存在emacs默認字體,如果不存在可嘗試安裝類似字體後重啟,比如ttf-dejavu

  • 2.找到太多字體

找到太多字體會導致某些地方溢出,無法呼出輸入法。終端下並不會遇到此現象。 將LC_CTYPE 設為 zh_CN.UTF-8,會減少找到的字體數目。

解決方法:在.xprofile或.xinitrc中添加以下內容後重新登錄或者重啟

export LC_CTYPE=zh_CN.UTF-8 

使用locale命令可查看是否成功更改。

更詳細的情況參見Emacs 為什麼要設置 LC_CTYPEYichao Yu給emacs寫的Patch

在 gnome-terminal中 Ctrl + Space 不能調出輸入法[編輯 | 編輯原始碼]

使用 GDM 3.16 啟動 GNOME,可能在某些程序中無法使用 Ctrl + Space 調出輸入法。解決方法是修改GSettings配置

gsettings set \
  org.gnome.settings-daemon.plugins.xsettings overrides \
  "{'Gtk/IMModule':<'fcitx'>}"

Ctrl + ; 會調出 Fcitx 的剪貼板[編輯 | 編輯原始碼]

嚴格的說,這不是 BUG, Fcitx 的 Ctrl + ; 會覆蓋很多用戶自己的快捷鍵,特別是 Emacs 用戶。有必要時,可以在配置界面中禁用剪貼板插件,或更改其激活快捷鍵。

fcitx-sogoupinyin 卡死、聯想失敗[編輯 | 編輯原始碼]

如果您遇到下列的問題:

  • 輸入類似「安裝」、「暗影」等 "a" 開頭的詞語,出現卡死的情況。
  • 輸入並不以拼音 "a" 開頭的詞語時,卻出現「阿拉伯」、「阿里巴巴」等以 "a" 開頭的錯誤聯想詞語等。

可以通過刪除 ~/.config/fcitx/sogou 下的所有內容的方式解決。

注意: 此操作會清空用戶詞庫。

在某些程序下輸入法總是被切換到美語鍵盤[編輯 | 編輯原始碼]

比如在 XMind 下,當 Enter 出新結點時,輸入法就會被切換到美語鍵盤,不得不按 Ctrl-Space 以重新切回中文輸入法。

啟動 Fcitx 的 Config, 在 Global Config 選項卡下的「Share State Among Window」選項裡選中「PerProgram」或「All」即可解決。

參見[編輯 | 編輯原始碼]