基于 liberime 的轻量级 Emacs Rime 输入法
使用 read-event 循环,与 Emacs 内置 quail 完全相同的模式
不借助 pre-command-hook/post-self-insert-hook 等hook
合成过程自包含:函数进入时开始,返回时结束,无状态泄露
适合想要最简单可用 的 rime 输入法的用户
基本是AI 写出来的代码
单文件 :仅 rimel.el 一个文件,约 700 行
依赖少 :仅依赖 liberime (无需额外 C 模块)
原生集成 :使用 Emacs 内置 input-method-function + register-input-method
候选展示 :echo area(默认)或 posframe 浮动窗口
光标处编码 overlay :输入时在光标处显示 preedit
翻页 :支持 C-f/C-b、PgDn/PgUp 等(完全可配置)
⏎ Enter 英文上屏 :按 Enter 直接提交原始英文输入
数字键/空格选候选
所有按键可配置 :翻页、确认、取消、退格、选择键均可自定义 see rimel-keymap
Predicates 断言 :根据上下文自动切换中/英文(代码区、字母后、evil 状态等)
创建的初衷是 使用 emacs-rime 的时候 空格上屏在我的linux上有bug , 上屏后看不到上屏的中文,需要移动下光标才行,想让AI试着修,都无从描述bug, 干脆 让AI 参考了 pyim emacs-rime 及emacs自带输入法,让它自已写了一个。
有兴趣的可以试试,反响好的话我就提melpa 没什么反馈就这样放着算了。
Update:
(defcustom rimel-highlight-first nil
"When non-nil, move the highlighted candidate to the first position.
For example, if candidates are [a b c d e] and c is highlighted,
display as [c d e a b]."
:type 'boolean
:group 'rimel)
新增了一个选项 C-n 选择下一个时,自动将其展示在第1个,类似 icomplete 的 icomplete-forward-completions
更新: 已经放到 melpa 了。
9 个赞
我输入中文不多,平时用系统输入法fcitx. 想问下你这个和系统输入法相比,有什么不同吗?
非要说 有什么特别的优点的话, 是 rimel-disable-predicates 的功能,能够根据你光标所在位置的context 判断是否自动切换到英文状态,
比如
在代码片段中(非 comment及string内部时) .
evil-mode normal/motion state时
这部分功能是 fork 自 emacs-rime 及pyim 的。
我平时也不用eamcs 中的输入法, 最近 尝试 ezemtsov/ewm: EWM - Emacs Wayland Manager - Codeberg.org 这个项目,它的思路是把emacs 的输入法给所有app 用, 但是现在还没有完全实现,我就想尝试下 集成pyim 或 emacs-rime , 给我的感受是 pyim 功能大而全,相对较重,我不是很喜欢, emacs-rime 的实现是通过各种hook 实现的输入法状态管理,跟内置的输入法实现机制差别很大 ewm集成它的时候比较麻烦。 且我用的时候 上屏的时候有bug(当然也可能跟linux compositor 有关 (我在ewm 与niri 下都能复现) 于是才有了这款输入法。
4 个赞
jixiuf:
pyim 功能大而全
哈哈,我一直认为 pyim 是个小项目呢,当时我还年轻,精力比较好,所以有什么自己认为好的想法就做进去了,其实后续观察这些功能用的也不多,现在年龄大了,整天就想着躺在床上刷手机,所以现在 pyim 基本上就是维护状态,新功能除非有明确的迹象是必要的,才考虑添加。
3 个赞
我是 Emacs Rime 用户。试用了一下 Rimel,感觉非常有潜力。感谢楼主!
优势:
目前发现的问题:
编译动态库的 Makefile 不太完善,或者文档不够详细,我手动编辑 Makefile 才编译成功。
五笔支持问题:无法自动顶字上屏。
无法输入中文标点。
不支持完全隐藏候选窗。(硬核五笔用户,完全不想看到候选窗)
2 个赞
1的问题 不在我这,是liberime 的问题。
2 3 4 都修好了,
4 (setq rimel-show-candidate nil)
ylagr
2026 年4 月 8 日 04:37
9
emacs-rime的c模块安装的时候就能自动处理了,而且不依赖liberime,liberime本身就是个c模块 ,还不好安装
liberime 也提供了 自动编译
(setq liberime-auto-build t)
只是有可能他边界没处理好,遇到的问题,可以试着提个bug看看作者反应。
现在 pyim 也是利用的 liberime 理论上安装过程是一样的。
神速!非常感谢!
不过,中文标点还有一点小问题,好像缺少省略号,只有 ^。
另外,方不方便支持内嵌首选项?对应 Rime 里的 style/inline_candidate: true。效果如下:
省略号你是按哪个键 出的。
更新下:
(setq rimel-inline-preedit 'candidate) ;此为默认值
lib e rime这个名字实在是和 librime 太像了,之前着实让我困扰了一番
试过用github action编译liberime,然后将ldd的所有dll打包放到路径里,发现也无法加载liberime-core.dll
标点的 可以再试试, 还有遗漏 可以尝试 将 按键 加到这个函数里面,生效后报给我 我再补上。
(defun rimel--composable-key-p (key)
"Return non-nil if KEY should start a rime composition.
Includes lowercase letters and common Chinese punctuation marks."
(and (integerp key)
(or (and (>= key ?a) (<= key ?z))
(memq key '(?+ ?= ?- ?_ ?\( ?\) ?* ?& ?\^ ?% ?$ ?# ?@ ?! ?` ?~
?\[ ?\] ?{ ?} ?\\ ?|
?\: ?\; ?\' ?\"
?, ?. ?< ?> ?/ ?\?
?\, ?。 ?… ?— ?· ?~ ?、)))))
pyim让我在wsl中用emacs不需要自己折腾输入法,而且输入体验和辅助输入法也很好用,开箱即用的体验真的很好。
1 个赞
试了最新版,以及这里贴的函数,都还是不能输入省略号,只能输入 ^。
另外,又发现一个问题:M-x spatial-window-select (来自 spatial-window )激活窗口选择界面之后,字母按键应该被用作窗口选择按键,但现在字母键仍然会被 Rimel 输入法劫获,导致无法切换窗口。Emacs 自带的 chinese-py 和 Emacs Rime 都没有这个问题。
更新:avy 似乎也会遇到类似问题。例如,M-x avy-goto-char-timer 之后,Emacs 内置输入法可以直接输入中文,而 rimel 会劫获键盘输入,avy 读不到任何输入,最后按空格后,avy 退出,而且输入法的首选项也不会上屏。
直觉上这个问题可能和 rimel 底层工作机制有关。
1 个赞
你们都能正常安装吗?为啥我安装的时候报错?
Compiling internal form(s) at Wed Apr 8 16:48:59 2026
Leaving directory ‘/home/user/.config/emacs/elpa/rimel’
Compiling file /home/user/.config/emacs/elpa/rimel/rimel.el at Wed Apr 8 16:48:59 2026
Entering directory ‘/home/user/.config/emacs/elpa/rimel/’
rimel.el:66:12: Warning: custom-declare-variable ‘rimel-inline-preedit’
docstring has wrong usage of unescaped single quotes (use \=' or different
quoting such as `...')
rimel.el:112:12: Warning: custom-declare-variable ‘rimel-keymap’ docstring
wider than 80 characters
rimel.el: Error: End of file during parsing: *Compiler Input*