求教怎么让 Avy 的 avy-goto-char-timer 支持中文?

试过了 ace-pinyin 这个包,这个包只支持如下的命令,并不支持 avy-goto-char-timer 命令:

;; When using `avy', all `avy' commands (as of 05/06/2016) related to
;;   char/word jumping are supported:
;;   - `avy-goto-char'
;;   - `avy-goto-char-2'
;;   - `avy-goto-char-in-line'
;;   - `avy-goto-word-0'
;;   - `avy-goto-word-1'
;;   - `avy-goto-subword-0'
;;   - `avy-goto-subword-1'
;;   - `avy-goto-word-or-subword-1'

Elisp 水平稀烂,不知道应该怎么写advice或者有什么办法,能让这个命令也支持中文?

它们的实现大多是 read 你的按键,做一点点逻辑,生成一个正则,然后传给同一个函数。可以参考论坛中某些大佬在别的地方对中文搜索的支持?

感谢回复,你说的思路我看明白了,我搜搜看研究一下。

  (defun my/avy-goto-char-timer (&optional arg)
    (interactive "P")
    (let ((avy-all-windows (if arg
                               (not avy-all-windows)
                             avy-all-windows)))
      (avy-with avy-goto-char-timer
        (setq avy--old-cands (avy--read-candidates
                              'pinyinlib-build-regexp-string))
        (avy-process avy--old-cands)))))
6 个赞

卧槽,感谢大神!!!亲测可用!!!兼容中英文!!

@liuhui

你好,我尝试了你的方法,非常好。因为用了 evil-pinyin 里面有支持中文正则,甚至把 ace-pinyin 删掉了。

但遇到问题,刚启动emacs时,用 my/avy-goto-char-timer, my/avy-goto-char-in-line,会提示: symbol’s function definition is void: avy-with

直到运行一个 avy 自身的命令,上面自定义的函数才能正常运行。

我用的是doom emacs,猜测可能是 autoloadavy-with 这个宏没有加载。

请问有什么办法,能解决这个问题吗,因为基本不用avy命令。

直接 require 'avy 就可以了,抱歉艾特,用惯了开箱即用的,忘了基础的命令了