众所周知, Emacs并没有内置中文分词系统, 以至于 =forward-word= 和 =backward-word= 以及 =kill-word= 等以单词为单位的操作只能粗暴的标点符号进行确定所谓"词汇", (其实是中文里的句子).
=jieba.el= 利用[[https://github.com/yanyiwu/nodejieba][nodejieba]]对buffer中的中文句子进行分割, 并且增强了上述以词为单位的 操作, 使使用Emacs处理中文文本的体验更加流畅.
注: 该图片文字来源于[[https://zh.wikipedia.org/zh-cn/GNU%25E9%2580%259A%25E7%2594%25A8%25E5%2585%25AC%25E5%2585%25B1%25E8%25AE%25B8%25E5%258F%25AF%25E8%25AF%2581][维基百科]], 遵循CC BY-SA 3.0条款使用
[[file:screenshot.gif]]
** 安装nodejieba 执行以下命令安装nodejieba
npm install
** 安装jieba.el
从[[https://elpa.gnu.org/packages/][GNU ELPA]]安装jieba.el的依赖[[https://elpa.gnu.org/packages/jsonrpc.html][jsonrpc]], 然后将jieba.el放入你emacs的 =load-path= 中, 在 =.emacs= 文件中写入
(require 'jieba) (jieba-mode)
你也可以使用 =use-package=
(use-package jieba :load-path "/path/to/jieba" :commands jieba-mode :init (jieba-mode))
启用 =jieba-mode= 后, =jieba.el= 会自动重新映射 =forward-word=, =backward-word=, =kill-word=, =backward-kill-word=, 到对应的jieba增强版本上.
你也可以自行定义 =jieba-mode-map= 来修改这些操作的按键绑定
| 按键名 | Action | |----------------------------+--------------------------| | =jieba-forward-word= | 向前移动一个中英文单词 | | =jibea-bacward-word= | 向后移动一个中英文单词 | | =jieba-kill-word= | 删除光标后的一个中文单词 | | =jieba-backward-kill-word= | 删除光标前的一个中文单词 | | =jieba-mark-word= | 选中光标下的一个中文单词 |
欢迎提交PR和Issue report.
相关项目
[[https://github.com/xuchunyang/chinese-word-at-point.el][chinese-word-at-point.el]] :: 另一个使用jieba分词进行中文分词的package.
[[https://github.com/tumashu/pyim][pyim]] :: 一个Emacs内部的中文输入法, 提供了按其输入词库进行分词的功能.