windows & macos & ubuntu & emacs install Rime

emacs-rime 配置

config.el

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
(use-package! rime
  :config
  (setq default-input-method "rime")
  ;; (setq rime-show-candidate 'posframe)   ;; 使用 posfarme 显示
  (setq rime-show-candidate 'minibuffer) ;; 使用minibuffer 显示 体验最好 不卡
  ;; (setq rime-show-candidate 'popup) ;; 使用popup 显示  卡爆了
  ;; (setq rime-show-candidate 'message)  ;; 使用 message 显示  体验不好  有Bug 上屏不会马上显示
  (set-face-attribute 'rime-default-face       nil :foreground "#d830f2" :background "#f1f1f1") ;; 候选字的样式
  (set-face-attribute 'rime-code-face       nil :foreground "#1bd672" :background "#f1f1f1") ;;  输入的编码的样式
  (set-face-attribute 'rime-candidate-num-face       nil :foreground "#565656" :background "#f1f1f1") ;; 候选序号样式
  (set-face-attribute 'rime-comment-face       nil :foreground "#565656" :background "#f1f1f1") ;; 编码提示颜色

  (setq rime-posframe-properties
        (list :background-color "#333333"
              :foreground-color "#dcdccc"
              :font "Fira Code-18"
              :internal-border-width 10))
  (setq evil-insert-state-message nil)   ;; 在 evil 下进入编辑模式不显示  -- INSERT -- 否第一个打的字将不能正确显示在minibuffer
  (when (or *is-linux* *is-mac*)
    (setq rime-user-data-dir "~/.doom.d/rime")   ;; RIME 的个人输入法方案的配置文件
    (setq rime-librime-root "~/.emacs.d/librime/dist"))
  (when *is-windows*
    (setq rime-user-data-dir "~/.doom.d/rime")   ;; RIME 的个人输入法方案的配置文件
    (cond ((file-exists-p "E:\\msys64\\mingw64\\share\\rime-data")
           (setq rime-share-data-dir "E:\\msys64\\mingw64\\share\\rime-data"))  ;; 这个一定要指定对 不然不能把 rime-user-data-dir 配置的输入法成功编译
          ((file-exists-p "C:\\msys64\\mingw64\\share\\rime-data")
           (setq rime-share-data-dir "C:\\msys64\\mingw64\\share\\rime-data"))  ;; 这个一定要指定对 不然不能把 rime-user-data-dir 配置的输入法成功编译
          ))  ;; 这个一定要指定对 不然不能把 rime-user-data-dir 配置的输入法成功编译

  (setq flycheck-check-syntax-automatically '(mode-enabled save))  ;; 配置flycheck 仅在模式使能和保存的时候进行check
  (defun my-set-rime-idle-flag ()
    ;; (message "rime idle")
    (setq my-rime-idle-p t))
  (advice-add #'rime--escape :after #'my-set-rime-idle-flag)

  (defun my/org-in-src-block-p()
    (interactive)
    (let* (first-search-result (in-src-block-flag nil) (cur-point (point)))
      (save-excursion
        (end-of-line)
        ;; #+begin_src verilog
        ;; #+end_src
        (when (re-search-backward "\\(#\\+begin_src\\|#\\+BEGIN_SRC\\|#\\+end_src\\|#\\+END_SRC\\)" nil t)
          (setq first-search-result (match-string 1))
          (unless (or (string= first-search-result "#+end_src") (string= first-search-result "#+END_SRC"))
            ;; 前面有 begin_src 如果后面有 end_src 则在 src_block 中
            (goto-char cur-point)
            (if (re-search-forward "\\(#\\+begin_src\\|#\\+BEGIN_SRC\\|#\\+end_src\\|#\\+END_SRC\\)" nil t)
                (progn
                  (setq first-search-result (match-string 1))
                  ;; (message " first-search-result : %s" first-search-result)
                  (unless (or (string= first-search-result "#+begin_src") (string= first-search-result "#+BEGIN_SRC"))
                    ;; 往后找找到end_src , 符合预期 认为在src_block 里
                    ;; (message "in src block")
                    (setq in-src-block-flag t)
                    ))))))
      in-src-block-flag))
  
  (defun my/rime-predicate-org-in-src-block-p ()
    "Whether point is in an org-mode's code source block."
    (and (derived-mode-p 'org-mode)
         (my/org-in-src-block-p)))

  (setq rime-disable-predicates
        '(rime-predicate-evil-mode-p ;; evil 模式的非编辑模式下使用英文
          rime-predicate-after-alphabet-char-p ;; 在英文字符串之后(必须为以字母开头的英文字符串)
          rime-predicate-after-ascii-char-p    ;; 任意英文字符后
          rime-predicate-current-input-punctuation-p ;; 当要输入的是符号时
          ;; rime-predicate-org-in-src-block-p          ;; 当在 org mode 里的代码块时 有BUG
          my/rime-predicate-org-in-src-block-p       ;; 当在 org mode 里的代码块时 时用英文 修复了原始的 rime-predicate-org-in-src-block-p 识别错误的BUG
          rime-predicate-current-uppercase-letter-p ;; 将要输入的为大写字母时
          rime-predicate-punctuation-line-begin-p   ;; 行首要输入符号时
          rime-predicate-hydra-p                    ;; 如果激活了一个 hydra keymap
          ;; rime-predicate-punctuation-after-space-cc-p ;; 当要在中文字符且有空格之后输入符号时
          rime-predicate-tex-math-or-command-p        ;; 在 (La)TeX 数学环境中或者输入 (La)TeX 命令时
          rime-predicate-in-code-string-p           ;; 在代码的字符串中,不含注释的字符串
          rime-predicate-prog-in-code-p))) ;; 在 prog-mode 和 conf-mode 中除了注释和引号内字符串之外的区域

windows macos ubuntu install Rime

Windows

  • 在 Windows 下构建 librime-emacs 的最简单的方法是使用 msys2

    1
    2
    3
    
        pacman -S pactoys base-devel
        pacboy -S librime:x librime-data:x emacs:x toolchain:x
        ln -s /mingw64/share/opencc/* /mingw64/share/rime-data/opencc # Fix the Simplified Chinese input
    

    如果之前有安装过emacs 的话 就卸载掉原来的emacs 吧 pacman 安装的emacs 是可加载动态库的emacs

  • 安装 emacs-rime

    1. package.el 加入以下内容:
      1
      
           (package! rime)
      
    2. doom sync
    3. 退出emacs
  • 编译emacs-rime.dll

    1
    2
    
      从MingW64 命令行启动emacs 没有意外的话会在C+\ 激活rime  编译 librime-emacs.dll 的时候出错 错误信息如下:
      rime-compile-module: Compile Rime dynamic module failed
    

    根据信息查看源码 定位到

    1
    2
    
        在rime--build-compile-env 的右括号按下 C-x C-e 可以得到env 的结果
        在 rime--root 上按C-h v 回车可以查看 rime--root 的值 最终得到编译命令如下:
    
    1
    2
    
      cd "e:/Users/wcq/AppData/Roaming/SPB_Data/.emacs.d/.local/straight/build/rime/";
      env "EMACS_MODULE_HEADER_ROOT=e:/msys64/mingw64/share/emacs/26.3/src/ MODULE_FILE_SUFFIX=.dll " make lib
    
    1
    2
    
      进入 e:/Users/wcq/AppData/Roaming/SPB_Data/.emacs.d/.local/straight/build/rime/
      查看 Makefile 内容如下:
    


    打开 MINGW64 终端尝试手工编译 librime-emacs.dll

    1
    2
    3
    
      export MODULE_FILE_SUFFIX=".dll"
      export EMACS_MODULE_HEADER_ROOT="E:/msys64/mingw64/share/emacs/26.3/src"
      make lib
    

    不出意外的话会在当前目录生成 librime-emacs.dll
    在 rime-activate 函数中

    1
    2
    
            查看 rime--module-path 变量的值 把刚生成的 librime-emacs.dll 拷贝到该路径
            一般来说就是在编译 librime-emacs.dll 的路径 所以这一步可以省略
    
  • 重启 emacs

  • 简单配置

    • 安装极点五笔
      查看 rime-share-data-dir 的值 进入该目录
      1
      2
      3
      
          git clone https://github.com/KyleBing/rime-wubi86-jidian
          mv rime-wubi86-jidian/* .
          rm -rf rime-wubi86-jidian
      
    • 重新部署
      在 emacs 中 M-x: rime-sync
  • 简单使用
    C+\ 激活rime 激活后在mode-line 会有一个输入法的符号

    符号变亮时表示处于中文输入状态 符号变暗时表示处于英文输入状态
    输入英文的方法有以下两种:

    1. 输入一到三个英文字母然后按下回车 已经输入的英文字母会自动上屏 接下来由于断言到前面是英文
      这时会切换到英文输入状态 就可以愉快的输英文了
    2. 输入大写字母自动进入输入英文模式

MacOS

安装鼠须管

直接到 https://rime.im/download/ 下载安装 ( 非 brew 安装 )

配置鼠须管的输入法

  1. 点鼠须管 => 用户设定查看 鼠须管的用户目录
  2. 进入 鼠须管的用户目录
  3. 安装极点五笔
    查看 rime-share-data-dir 的值 进入该目录
    1
    2
    3
    
       git clone https://github.com/KyleBing/rime-wubi86-jidian
       mv rime-wubi86-jidian/* .
       rm -rf rime-wubi86-jidian
    
  4. 链接自定义词典
    1
    
      ln -s  /Users/wcq-062821/.doom.d/rime_wubi_usr_dict/wubi86_jidian_user.dict.yaml wubi86_jidian_user.dict.yaml
    
    Users/wcq-062821/.doom.d/rime_wubi_usr_dict/wubi86_jidian_user.dict.yaml 是我自定义的词典文件

安装 librime

librime github 地址

1
2
3
curl -OJ  https://github.com/rime/librime/releases/download/1.7.3/rime-1.7.3-osx.zip
unzip rime-1.7.3-osx.zip -d ~/.emacs.d/librime
rm -rf rime-1.7.3-osx.zip

这些只是安装了编译 librime 的编译环境

安装 emacs-rime

在 doom emacs 的 package.el 中加入

1
(package! rime)

如果需要更新则先删掉 再 doom sync 然后再加上再 doom sync

1
2
3
rm -rf ~/.emacs.d/.local/straight/build/rime
rm -rf ~/.emacs.d/.local/straight/repos/emacs-rime
doom sync

启动 rime

快捷键 C+\

配置rime

1
vim build/default.yaml

把schmech 相关的内容改成下列内容:

1
2
3
4
5
6
7
schema_list:
- schema: wubi86_jidian
- schema: numbers
- schema: wubi86_jidian_pinyin
- schema: wubi86_jidian_trad
- schema: wubi86_jidian_trad_pinyin
- schema: pinyin_simp

Ubuntu

安装librime

1
sudo apt install librime-dev
  • 请注意 librime-dev 的版本,如果在1.5.3以下,则需要自行编译。

    1
    2
    3
    4
    5
    
    sudo apt install git build-essential cmake libboost-all-dev libgoogle-glog-dev libleveldb-dev libmarisa-dev libopencc-dev libyaml-cpp-dev libgtest-dev
    git clone https://github.com/rime/librime.git ~/.emacs.d/librime
    cd ~/.emacs.d/librime
    make
    sudo make install
    

下载极点五笔仓库

如果 ~/.doom.d/rime/ 下面已经有jidian 五笔的文件了则这一步可以跳过

1
2
3
4
cd ~/.doom.d/rime/
git clone https://github.com/KyleBing/rime-wubi86-jidian.git
cp rime-wubi86-jidian/* .
rm -rf rime-wubi86-jidian/

C + \ 激活rime

没有意外的话, 在 ~/.doom.d/rime/ 下会生成一个 build 文件夹, 极点五笔已经被编译成二进制放里面了

配置rime

1
vim build/default.yaml

把schmech 相关的内容改成下列内容:

1
2
3
4
5
6
7
schema_list:
- schema: wubi86_jidian
- schema: numbers
- schema: wubi86_jidian_pinyin
- schema: wubi86_jidian_trad
- schema: wubi86_jidian_trad_pinyin
- schema: pinyin_simp

PC 端的RIME

Windows

1. 下载安装小狼毫

2. 右键小狼毫输入法图标选择用户目录

3. 把极点五笔的配置文件复制到用户目录

项目地址 https://github.com/KyleBing/rime-wubi86-jidian

4. 配置输入法

  • 把拼音混输繁体排到第一位

  • rime jidian_wubi 实现默认用英文输入 并且中文为简体

    修改 wubi86_jidian_pinyin.schema.yamlwubi86_jidian_trad_pinyin.schema.yaml 文件
    switches 改成下面这样

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
        switches:
        - name: ascii_mode
            reset: 1
            states: [ 中文, 英文 ]
        - name: zh_trad
            reset: 0    # 初始状态为 0: 简 -> 繁 1: 繁 -> 简
            states: [ 简体, 繁体 ]
        - name: full_shape
            states: [ 半角, 全角 ]
        - name: extended_charset
            states: [ 常用, 扩展 ]
        - name: ascii_punct
            states: [ 。,, ., ]
    

Ubuntu

PC 端的RIME 为 ibus-rime

1
sudo apt install ibus-rime

rime 目录在

1
~/.config/ibus/rime/

安装极点五笔输入法

  • 下载仓库

    1
    2
    3
    4
    
    cd ~/.config/ibus/rime/
    git clone https://github.com/KyleBing/rime-wubi86-jidian.git
    cp rime-wubi86-jidian/* .
    rm -rf rime-wubi86-jidian/
    
  • 部署输入法

    重新部署一下输入法, 这会把极点五笔编译成二进制供rime 使用

    1
    
    vim ~/.config/ibus/rime/build/default.yaml
    
  • 配置

    1
    
    vim build/default.yaml
    

    把schmech 相关的内容改成下列内容:

    1
    2
    3
    4
    5
    6
    7
    
    schema_list:
    - schema: wubi86_jidian
    - schema: numbers
    - schema: wubi86_jidian_pinyin
    - schema: wubi86_jidian_trad
    - schema: wubi86_jidian_trad_pinyin
    - schema: pinyin_simp
    

    rime jidian_wubi 实现默认用英文输入 并且中文为简体
    导入自定义词库

    1
    2
    
    cd ~/.config/ibus/rime/
    ln -s ~/.doom.d/rime/wubi86_jidian_user.dict.yaml  wubi86_jidian_user.dict.yaml