我的输入法使用的是 emacs-rime,用的是 doom 的配置。
现在用 swiper 的搜索命令(例如 swiper-isearch-thing-at-point
) 的时候是默认输入英文进行搜索,输入法并没有开启;
如果要搜索中文,每次要搜索的时候都需要手动执行一下 C-\
来开启输入法,挺麻烦的,有什么办法自动开启吗?
我的输入法使用的是 emacs-rime,用的是 doom 的配置。
现在用 swiper 的搜索命令(例如 swiper-isearch-thing-at-point
) 的时候是默认输入英文进行搜索,输入法并没有开启;
如果要搜索中文,每次要搜索的时候都需要手动执行一下 C-\
来开启输入法,挺麻烦的,有什么办法自动开启吗?
advice + (activate-input-method default-input-method)
可以用拼音首字母搜索, 设置一下ivy-re-builders-alist
, 见 emacs.d/init-ivy.el at c07ad78f93ea8bd6cfaf8a570d1db4bfd8afe766 · redguardtoo/emacs.d · GitHub
我也来提供个思路:
(setq my-minibuffer-CN-command '(swiper-isearch-thing-at-point))
(setq rime-deactivate-when-exit-minibuffer t)
(defun my-minibuffer-toggle-CN-input ()
(when (memq this-command chinese-input-command)
(activate-input-method "rime")))
(add-hook 'minibuffer-setup-hook #'my-minibuffer-toggle-CN-input)
不过更好的办法是拼音搜索
谢谢各位的建议!
我试了一下拼音首字母搜索的方法,感觉跟我目前的使用过程没有什么差别,我目前是需要手动用 C-\
来开启一下输入法(我个人感觉这个操作让我的大脑被打断了一下^_^),接下来的就是利用 emacs-rime 的中英文自动切换来进行输入搜索就可以了;
但是拼音首字母进行搜索的话,我看了一下代码都需要预先输入一个特定的字符,例如!
、 :
或者 ;
之类的,我还是需要额外敲一次键盘进行一下切换
因此,我依葫芦画瓢综合了一下,如下:
(defun my-extended-regexp (str)
(activate-input-method default-input-method)
str)
(defun my-re-builder-extended-pattern (str)
(ivy--regex-plus (my-extended-regexp str)))
(setq ivy-re-builders-alist '((t . my-re-builder-extended-pattern)))
直接在扩展里面开启一下输入法,不知道我这样写有没有什么问题?
我写了个rime-regexp,用来做consult五笔搜索的,但原理也可用在ivy与拼音上面,但已经有些日子没有维护了,道友可以看看。
你可以不使用特殊字符启动中文搜索,而是默认中英文一起搜。pinyinlib-build-regexp-string
是底层api, 其代码,
(defun pinyinlib-build-regexp-string (str &optional no-punc-p tranditional-p only-chinese-p)
...
)
见其最后一个参数only-chinese-p
每个人工作流不一样,我很少需要搜中文,只是偶尔搜一下中文文件名,所以不在乎输入一个额外的启动字符。