swiper搜索的时候如何默认开启输入法

我的输入法使用的是 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)

不过更好的办法是拼音搜索

1 个赞

谢谢各位的建议!

我试了一下拼音首字母搜索的方法,感觉跟我目前的使用过程没有什么差别,我目前是需要手动用 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)))

直接在扩展里面开启一下输入法,不知道我这样写有没有什么问题?

1 个赞

我写了个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

每个人工作流不一样,我很少需要搜中文,只是偶尔搜一下中文文件名,所以不在乎输入一个额外的启动字符。

1 个赞