见 安装与使用方法
通过变量 rime-translate-keybindings
可以设置哪些组合键将发送至 Rime 。可以用来配合方案中的设置完成光标移动和选字等功能。
支持 Control (C-), Meta (M-), Shift (S-)的组合键。
;; 默认值
(setq rime-translate-keybindings
'("C-f" "C-b" "C-n" "C-p" "C-g" "<left>" "<right>" "<up>" "<down>" "<prior>" "<next>" "<delete>"))
设置 rime-show-candidate
。
可选值 | 说明 |
---|---|
nil | 不展示 |
minibuffer | 在minibuffer中展示, 推荐使用的方式 |
message | 直接使用 message 输出,兼容控制 minibuffer 内容的插件 |
popup | 使用 popup.el 展示跟随的候选 |
posframe | 使用 posframe 展示跟随的候选,在不可用的时候会用 popup |
sidewindow | 使用 sidewindow 展示跟随的候选 |
Face | 说明 |
---|---|
rime-default-face | 默认的前景色和背景色(仅posframe) |
rime-code-face | 编码的颜色 |
rime-candidate-num-face | 候选序号颜色 |
rime-comment-face | 编码提示颜色 |
设置 rime-posframe-style
, rime-popup-style
或者 rime-sidewindow-style
可选值有
可选值 | 说明 |
---|---|
simple | 单行 |
horizontal | 水平,默认 |
vertical | 垂直 |
设置 rime-posframe-properties
, 其中颜色的设置使用 rime-default-face
.
(setq rime-posframe-properties
(list :font "sarasa ui sc"
:internal-border-width 10))
支持的内容参照 posframe 。
设置 rime-sidewindow-style
,可选值有 top
, bottom
, left
, right
,分别指 sidewindow 出现的位置位于上下左右。
设置 rime-sidewindow-keep-window
,为 t
时可保持 sidewindow 为开启状态。
默认使用 |
字符做为软光标,可以通过如下方式修改。
(setq rime-cursor "˰")
颜色可通过 rime-cursor-face
设置。
可通过 rime-preedit-face
设置。
设置 rime-show-preedit
, 可选值有
可选值 | 说明 |
---|---|
t | 展示在菜单中 |
inline | 替换上屏预览 |
nil | 不展示 |
注意:使用 inline
或 nil
将不再展示软光标。
如果使用模式编辑,或是在一些特定的场景下需要自动使用英文,可以设
置~rime-disable-predicates~ , rime-disable-predicates
的值是一个断言列表,
当其中有任何一个断言的值 **不是** nil 时,会自动使用英文。
一个在 evil-normal-state
中、在英文字母后面以及代码中自动使用英文的例子。
(setq rime-disable-predicates
'(rime-predicate-evil-mode-p
rime-predicate-after-alphabet-char-p
rime-predicate-prog-in-code-p))
目前可用的断言函数
rime-predicate-after-alphabet-char-p
在英文字符串之后(必须为以字母开头的英文字符串)
rime-predicate-after-ascii-char-p
任意英文字符后
rime-predicate-prog-in-code-p
在
prog-mode
和conf-mode
中除了注释和引号内字符串之外的区域rime-predicate-in-code-string-p
在代码的字符串中,不含注释的字符串。
rime-predicate-evil-mode-p
在
evil-mode
的非编辑状态下rime-predicate-ace-window-p
激活
ace-window-mode
rime-predicate-hydra-p
如果激活了一个
hydra
keymaprime-predicate-current-input-punctuation-p
当要输入的是符号时
rime-predicate-punctuation-after-space-cc-p
当要在中文字符且有空格之后输入符号时
rime-predicate-punctuation-after-ascii-p
当要在任意英文字符之后输入符号时
rime-predicate-punctuation-line-begin-p
在行首要输入符号时
rime-predicate-space-after-ascii-p
在任意英文字符且有空格之后
rime-predicate-space-after-cc-p
在中文字符且有空格之后
rime-predicate-current-uppercase-letter-p
将要输入的为大写字母时
rime-predicate-tex-math-or-command-p
在 (La)TeX 数学环境中或者输入 (La)TeX 命令时
使用函数 (rime-lighter)
返回一个用于展示的 ㄓ
符号。
可以通过 rime-indicator-face
和 rime-indicator-dim-face
设置样式。
如下设置可替换输入法的符号,使其用颜色提示当前的临时英文状态。
;;; 具体参考 mode-line-mule-info 默认值,其中可能有其它有用信息
(setq mode-line-mule-info '((:eval (rime-lighter))))
设置 rime-inline-predicates
,结构与 rime-disable-predicates
相同,具有较低优先级。
这个功能主要用来实现输入带空格的临时英文的场景。
由于当前实现限制,如果 Rime 配置中没有使用默认的 Shift_L
切换 inline ascii 模式,需要在 emacs-rime 中指定。
两边配置相同才能正常激活。
;;; support shift-l, shift-r, control-l, control-r
(setq rime-inline-ascii-trigger 'shift-l)
在有编码的状态下使用 rime-inline-ascii
命令可以切换状态。
(define-key rime-active-mode-map (kbd "M-j") 'rime-inline-ascii)
(setq rime-inline-ascii-holder ?x) ; Any single character that not trigger auto commit
使用 rime-force-enable
来临时强制使用强制中文模式(即无视 rime-disable-predicates
中的规则),
在 一次输入行为 或 取消输入 之后会自动关闭强制中文模式。
你可能需要给这个命令绑定一个按键来使用。
(define-key rime-mode-map (kbd "M-j") 'rime-force-enable)
默认行为为自动关闭,设置 rime-deactivate-when-exit-minibuffer
为 nil 取消该行为。
rime-share-data-dir
是 Rime 安装后放置配置的目录,例如 Linux 上默认为 /usr/share/rime-data. 通常使用默认值即可。
如果使用其它的位置,可以配置该值。
rime-user-data-dir
为 emacs-rime 布署的位置,默认为 ~/.emacs.d/rime ,如果需要其它位置,可以配置该值。
使用 rime-open-configuration
打开自定义配置文件。
使用 rime-open-schema
打开一个方案的自定义配置文件。
如何获得支持动态模块的 Emacs
Linux 各主要发行版自带 emacs 默认已启用动态模块支持。
brew tap d12frosted/emacs-plus
brew install emacs-plus
brew tap railwaycat/emacsmacport
brew install emacs-mac --with-modules
使用 --with-modules
选项.
编译时无法找到 rime_api.h
必须设置 rime-librime-root
参照安装方法中的说明。
编译时无法找到 emacs-module.h
如果自己编译 Emacs 且没有安装到标准目录(/usr/, /usr/local/),
必须 指定 rime-emacs-module-header-root
。
在 :custom
中加入如下内容.
(假设将 Emacs 安装到了 ~/emacs)
(rime-emacs-module-header-root "~/emacs/include")
如何重新部署?
emacs-rime
的配置文件更新之后,与RIME一样,都需要重新部署才可生效。
以添加 地球拼音(terra_pinyin)
为例。
找到 emacs-rime
配置所在路径,或使用 M-x rime-open-configuration
打开文件 default.custome.yaml
,在 patch:schema_list
中添加 - schema: terra_pinyin
,需要 M-x rime-deploy
重新部署才可启用地球拼音方案,重新部署成功后按 C-`
选择输入方案。
示例如下:
patch:
schema_list:
- schema: luna_pinyin
- schema: pinyin_simp
- schema: terra_pinyin
menu/page_size: 7 # 每页显示7个候选字词。
switcher:
hotkeys:
- Control+grave # 激活RIME选单的快捷键,某些版本的RIME支持<F4>为快捷键,容易与其他软件冲突。
如何同步词库?
M-x rime-sync
可对RIME输入方案和词库进行同步与备份,每次同步双向进行,词库生成的备份文件为 sync/ins_id/schema.userdb.txt
,其本身是文件夹 schema.userdb/
中词库与词频使用记录的纯文本形式,方便用户跨平台、多设备使用。
所谓双向同步,即当前设备中的词频或用户自造词( schema.userdb/
中)与备份文件( sync/ins_id/schema.userdb.txt
中)所记录的词库会被RIME合并,其 并集 将会继续记录在 schema.userdb/
中,同时生成一份新的备份文件,仍名为 sync/ins_id/schema.userdb.txt
,并(在不询问用户的情况下)将旧的覆盖。
上述路径中 sync
文件夹与配置文件 default.custom.yaml
在同一目录, ins_id
对应的是 installation.yaml
文件中 installation_id
的值,默认值为随机生成,可自定义为其他字符串。
以添加 地球拼音(terra_pinyin)
后同步为例。启用该方案后,在RIME数据目录下会产生名为 terra_pinyin.userdb
的文件夹,其中为使用频率与自造词的记录,不可随意修改。同步前先修改 installation.yaml
中内容为自定义的 installation_id: "hesperus"
,之后 M-x rime-sync
,将会在 sync/hesperus/
生成文件 terra_pinyin.userdb.txt
(词库)与 terra_pinyin.schema.yaml
(输入方案)。
若在其他设备或系统中有个人积累的词库,想继续使用。则先在旧系统中进行同步,将生成的 terra_pinyin.userdb.txt
复制到当前系统的 sync/hesperus/
下,再进行同步或部署,此时旧系统中备份的词库将会被合并到当前系统的 terra_pinyin.userdb/
,新的并集也将会被同时导出,并覆盖 terra_pinyin.userdb.txt
。
重新部署后原有个人词库丢失
(以地球拼音方案在fcitx-rime与emacs-rime中使用为例。)
不建议 ~emacs-rime~ 与 ~fcitx-rime~ 共用数据文件夹 。若设置
(setq rime-user-data-dir "~/.config/fcitx/rime/")
,则在 emacs-rime
初次部署后,将会生成新的 terra_pinyin.userdb/
文件夹,原有 fcitx-rime
使用记录将会被移动到 terra_pinyin.userdb.old/
,此时新的 terra_pinyin.userdb.txt
中词频为空。
设置 emacs-rime
用户数据目录到其他文件夹,删除 terra_pinyin.userdb/
并将 terra_pinyin.userdb.old/
重命名为前者,再次同步或部署, terra_pinyin.userdb.txt
亦将恢复。
词库同步失败
(以地球拼音方案使用为例。)
建议将不同设备或系统中的 ~installation_id~ 设为同一值 。若其不同,则可能同步失败,即从旧系统同步并复制的 terra_pinyin.userdb.txt
中的词频记录不会被纳入到当前的 terra_pinyin.userdb/
。
此时该文件中词频不为空,但其中 user_id
等不同,修改此值后再次同步仍可能不生效。
在 isearch 中的使用
目前在 isearch 中不能正常工作,但是可以使用 phi-search.
候选框最后一项不显示?
极少数用户下会偶尔出现最后一个候选词不显示的情况,可以确定跟 `posframe` 有关,但 目前尚未找到原因,有一个暂时的解决办法,就是给候选词列表最后附加一个全角空格,这 样即使出现“吃字”的情况也只是把末尾的全角空格“吃”掉,不会影响候选词的显示。代码如 下:
(defun +rime--posframe-display-content-a (args)
"给 `rime--posframe-display-content' 传入的字符串加一个全角空
格,以解决 `posframe' 偶尔吃字的问题。"
(cl-destructuring-bind (content) args
(let ((newresult (if (string-blank-p content)
content
(concat content " "))))
(list newresult))))
(if (fboundp 'rime--posframe-display-content)
(advice-add 'rime--posframe-display-content
:filter-args
#'+rime--posframe-display-content-a)
(error "Function `rime--posframe-display-content' is not available."))
无需 librime 纯 Emacs 实现的输入法?
你可能需要 pyim.
如何结合evil-escape一起使用?
以下代码可能有性能问题
在你的配置中添加如下内容,即可在当前没有输入内容(没有preedit overlay)的情况 下,用evil-escape的按键回到normal模式。
(defun rime-evil-escape-advice (orig-fun key)
"advice for `rime-input-method' to make it work together with `evil-escape'.
Mainly modified from `evil-escape-pre-command-hook'"
(if rime--preedit-overlay
;; if `rime--preedit-overlay' is non-nil, then we are editing something, do not abort
(apply orig-fun (list key))
(when (featurep 'evil-escape)
(let (
(fkey (elt evil-escape-key-sequence 0))
(skey (elt evil-escape-key-sequence 1))
)
(if (or (char-equal key fkey)
(and evil-escape-unordered-key-sequence
(char-equal key skey)))
(let ((evt (read-event nil nil evil-escape-delay)))
(cond
((and (characterp evt)
(or (and (char-equal key fkey) (char-equal evt skey))
(and evil-escape-unordered-key-sequence
(char-equal key skey) (char-equal evt fkey))))
(evil-repeat-stop)
(evil-normal-state))
((null evt) (apply orig-fun (list key)))
(t
(apply orig-fun (list key))
(if (numberp evt)
(apply orig-fun (list evt))
(setq unread-command-events (append unread-command-events (list evt))))))
)
(apply orig-fun (list key)))))))
(advice-add 'rime-input-method :around #'rime-evil-escape-advice)