Skip to the content.

Rime 输入法

我使用 Rime 输入法并不是其各种高级功能,我之前一直使用搜狗,但是有一次搜狗崩溃了, 然后又不知道恢复,在网上参考了各种资料,都无法解决。

  1. https://askubuntu.com/questions/1251749/how-to-install-sogou-input-method-on-ubuntu-20-04
  2. https://leimao.github.io/blog/Ubuntu-Gaming-Chinese-Input/ 忍无可忍,就换成 Rime 了。但是我发现 Rime 的输入法的门槛很高,这里简单记录下配置过程。

安装,这里仅仅考虑 fedora ,并且是最新环境的

https://extensions.gnome.org/extension/261/kimpanel/

参考 rime/linux-install.sh ,其实也就是:

首先在你对应的系统中安装 fcitx-rime,例如:

检查版本:

sudo rpm -qa | grep rime
perl-experimental-0.034-2.fc42.noarch
librime-1.13.1-1.fc42.x86_64
fcitx5-rime-5.1.12-1.fc42.x86_64

配置 fcitx5

在 Fcitx5 Configure 中增加 rime 输入法。

在 “Available Input Method” 中搜索 Rime,选中之后,点击中间的那个 “<”,让 “Current Input Method” 中增加 Rime 。

image

当前配置结构

当前使用 Fcitx5 加载 Rime,Rime 中只启用雾凇拼音的小鹤双拼方案。主词典完全由 Rime Ice 管理,个人固定词汇通过独立的 custom_phrase 翻译器加载,不再维护额外的 聚合词典。

Fcitx5
└── fcitx5-rime
    └── ~/.local/share/fcitx5/rime/
        ├── default.yaml
        │   └── schema_list: double_pinyin_flypy
        ├── double_pinyin_flypy.schema.yaml
        │   ├── script_translator
        │   │   └── dictionary: rime_ice
        │   │       └── rime_ice.dict.yaml
        │   │           ├── cn_dicts/8105
        │   │           ├── cn_dicts/base
        │   │           ├── cn_dicts/ext
        │   │           ├── cn_dicts/tencent
        │   │           └── cn_dicts/others
        │   └── table_translator@custom_phrase
        │       └── user_dict: custom_phrase_double
        ├── custom_phrase_double.txt
        │   └── -> ~/.dotfiles/rime/custom_phrase_double.txt
        └── build/
            └── Rime 部署时生成的编译结果

各层的职责:

rime.nvim:在 Neovim 内部使用 Rime

rime.nvim 是另一种 Rime 前端:它把 librime 直接加载进 Neovim,在插入模式中自己处理按键、候选窗口和上屏,和 Fcitx5 在终端外部处理输入是两条独立路径。它不会自动继承 Fcitx5 当前已经打开的 输入状态,但可以复用同一套 Rime 配置和词库。

安装

系统先安装 librime 和 Fcitx5 Rime 配置。当前 Fedora 配置使用:

sudo dnf install -y fcitx5-rime
cd ~/.dotfiles
bash rime/linux-install.sh

Neovim 使用 lazy.nvim 管理插件。插件声明和本仓库中的实际配置入口是 nvim/lua/usr/lazy.lua:

{
  "rimeinn/rime.nvim",
  lazy = false,
}

第一次启动 Neovim 时,lazy.nvim 会安装插件及其 rockspec 依赖(ime、 platformdirs、lua-cjson 等)。这些依赖需要 Lua 5.1;如果 Nix 环境中的 luarocks 默认指向 Lua 5.2,可以在临时环境中安装:

nix shell nixpkgs#lua5_1 nixpkgs#lua51Packages.luarocks \
  nixpkgs#readline nixpkgs#xmake \
  --command nvim --headless '+Lazy! install rime.nvim' +qa

当前机器上的 librime 由系统提供,Neovim 的 Nix 动态链接环境还需要确保它能 找到 /lib64/librime.so.1 及其依赖库;如果出现 librime.so.1: cannot open shared object file,先检查:

ldconfig -p | grep librime
ldd ~/.local/share/nvim/lazy-rocks/rime.nvim/lib/lua/5.1/rime.so

当前接入方式

插件的自动目录探测会优先尝试 IBus、Fcitx 和 Nix profile 目录。当前配置显式指定:

用户配置和词库:~/.local/share/fcitx5/rime/
共享 Rime 数据:/usr/share/rime-data/

这样可以读到 double_pinyin_flypy、Rime Ice 以及仓库维护的 custom_phrase_double.txt。如果机器使用其他前端或目录,需要修改 nvim/lua/usr/lazy.lua 中的 traits.user_data_dir 和 traits.shared_data_dir,不要只修改生成的 build/ 文件。

当前提供以下入口:

:RimeToggle
:RimeEnable
:RimeDisable

插入模式下当前绑定 <C-m>(Ctrl-M)切换 Rime,<C-\> 将按键传给 Rime。这个 切换键属于 Neovim 内部前端,不等同于 Fcitx5 的 Ctrl-Space。启用后输入小鹤双拼编码,例如 nh,应看到 候选窗口;wsm 应得到“为什么”,smartx 应得到“北京志凌海纳科技有限公司”。

曾经出现的两个问题

  1. 安装成功但完全没有候选

    原因不是插件没有加载,而是自动探测选中了旧的 ~/.config/fcitx/rime 或 Nix profile 下的 rime-data,没有读到当前 Fcitx5 目录。定位时先查看:

    find ~/.local/share/fcitx5/rime -maxdepth 1 -type f | head
    fcitx5-remote -n
    

    再在 Neovim 中确认方案和目录:

    nvim --headless \
      '+lua local r=require("rime.nvim"); r.init(); print(r.ime.session:get_current_schema())' \
      +qa
    

    预期方案是 double_pinyin_flypy。

  2. wsm、smartx 等自定义短语消失

    词库本身没有消失。rime.nvim 原版在“当前前缀暂时没有候选”时会立即提交 composition;wsm 输入到 ws 时正好会经过这个状态,于是 ws 被提前上屏, 第三个字符 m 无法再组成完整编码。smartx 的每一步都有英文候选,所以不容易 暴露这个问题。

    当前配置覆盖了插件的 draw():当没有候选但仍有 preedit 时保留输入串,直到 后续按键产生候选或用户明确确认。用下面的 headless 测试可以验证:

    nvim --headless '+lua local r=require("rime.nvim"); r.init(); r.enable(); \
      r.ime:process("w"); r.ime:process("s"); local _,lines=r.ime:process("m"); \
      print(vim.inspect(lines))' +qa
    

    输出中应包含 为什么。

本仓库只维护下面两个入口文件:

文件 说明
rime/linux-install.sh 安装/更新 Rime Ice,并把个人短语文件链接到 Rime 目录
rime/custom_phrase_double.txt 小鹤双拼个人固定短语,格式为“词汇、编码、权重”

修改个人短语后执行:

fcitx5 -r -d

完整安装或更新配置时执行:

cd ~/.dotfiles
bash rime/linux-install.sh
fcitx5 -r -d

fcitx5-remote -r 只会重载 Fcitx5 配置,在当前环境中不会触发 Rime 重新部署。

常用快捷键

  1. ctrl space 唤出 rime 输入法
  2. shift 切换的 rime 的中文输入和英文输入。
  3. ctrl delete : 删除自造词

皮肤

https://github.com/fcitx/fcitx5-rime/issues/15

nixos 的配置

其他的内容都相同,就是 fcitx 和 rime 的安装和一般的系统不同。

  i18n.inputMethod = {
    enabled = "fcitx5";
    fcitx5.addons = with pkgs; [
      fcitx5-rime
    ];
  };

参考 NixOS 中文字体输入法 配置。

2024-05-30 的发现

如果似乎是需要将 fcitx 的配置中的 Shift-L 取消掉,不然他会覆盖掉 rime 的行为。

甚至怀疑是键盘的问题,但是实际上并不是; https://superuser.com/questions/248517/show-keys-pressed-in-linux

小鹤双拼的自定义短语放在 rime/custom_phrase_double.txt。

rime-ls

git clone https://github.com/wlh320/rime-ls
sudo dnf install librime-devel
cd rime-ls
cargo build --release
cp target/release/rime_ls ~/.cargo/bin

在 asahi linux fedora 上尝试的时候,还需要安装如下内容:

这是没有图形界面的哦,一样是可以正常使用的

/home/martins3/.dotfiles/rime/linux-install.sh
sudo dnf install ibus-rime

存在的问题

  1. 自动选择数值
    • 没太搞懂,虽然说,https://github.com/liubianshi/cmp-lsp-rimels 已经解决了,但是实际上不好用,但是问题不大,因为
  2. , 的输入应该是自动,谁 miaomiao 的输入中文的忽然携带一个英文都好
  3. 是否可以变为 toggle 的模式
  4. 没办法切换为双拼,但是在 rime-ls 中是可以的
      schema_trigger_character = "&" -- [since v0.2.0] 当输入此字符串时请求补全会触发 “方案选单”
    
  5. 双拼没办法显示当自动匹配的拼音字母

小鹤双拼的配置

配置小鹤双拼还是比较简单的。

不能在赞同了: https://www.zhihu.com/question/383416202/answer/2584564433

使用 rime-ice 加上 rime-auto-deploy

https://github.com/iDvel/rime-ice https://github.com/Mark24Code/rime-auto-deploy

https://github.com/iDvel/rime-ice/issues/133 https://www.mintimate.cc/zh/guide/faQ.html#linux%E8%96%84%E8%8D%B7%E9%85%8D%E7%BD%AE%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8

实在是太复杂了,我靠 : 似乎这里没有插件,所以有问题 https://github.com/NixOS/nixpkgs/blob/nixos-24.05/pkgs/development/libraries/librime/default.nix

切换 ibus 和 fcitx5

似乎 fcitx5 很简单:

https://github.com/fcitx/fcitx5-rime https://github.com/rime/ibus-rime/issues : 这个不维护了

rimels 初步尝试

diff --git a/nvim/lua/usr/lazy.lua b/nvim/lua/usr/lazy.lua
index f49b0c7ef8a1..d1459b277c94 100644
--- a/nvim/lua/usr/lazy.lua
+++ b/nvim/lua/usr/lazy.lua
@@ -185,63 +185,4 @@ require("lazy").setup({
     config = true,
   },
   'ojroques/nvim-osc52',
-  {
-    "liubianshi/cmp-lsp-rimels",
-    dir = "/home/martins3/core/cmp-lsp-rimels",
-    -- 这个插件让正常的补全很卡
-    enabled = false,
-    config = function()
-      local compare = require("cmp.config.compare")
-      local cmp = require("cmp")
-      cmp.setup({
-        -- 设置排序顺序
-        sorting = {
-          comparators = {
-            compare.sort_text,
-            compare.offset,
-            compare.exact,
-            compare.score,
-            compare.recently_used,
-            compare.kind,
-            compare.length,
-            compare.order,
-          },
-        },
-      })
-
-      require("rimels").setup({
-        keys = { start = "jk", stop = "jh", esc = ";j", undo = ";u" },
-        cmd = { "/home/martins3/.cargo/bin/rime_ls" },
-        rime_user_dir = "/home/martins3/.local/share/rime-ls",
-        shared_data_dir = "/home/martins3/.local/share/fcitx5/rime",
-        filetypes = { "NO_DEFAULT_FILETYPES" },
-        single_file_support = true,
-        settings = {},
-        docs = {
-          description = [[https://www.github.com/wlh320/rime-ls, A language server for librime]],
-        },
-        max_candidates = 9,
-        trigger_characters = {},
-        schema_trigger_character = "&", -- [since v0.2.0] 当输入此字符串时请求补全会触发 “方案选单”
-        probes = {
-          ignore = {},
-          using = {},
-          add = {},
-        },
-        detectors = {
-          with_treesitter = {},
-          with_syntax = {},
-        },
-        cmp_keymaps = {
-          disable = {
-            space = false,
-            numbers = false,
-            enter = false,
-            brackets = false,
-            backspace = false,
-          },
-        },
-      })
-    end,
-  },
 }, {})

语音输入

https://github.com/xifan2333/fcitx5-vinput

参考 && TODO

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。