Find the buffer with Chinese name
We can find the buffer with Chinese name efficiently by using the first character of pinyin.
Here is the code (ivy and pinyinlib is required):
(defun ivy-switch-buffer-matcher-pinyin (regexp candidates)
(unless (featurep 'pinyinlib) (require 'pinyinlib))
(let* ((pys (split-string regexp "[ \t]+"))
(regexp (format ".*%s.*"
(mapconcat 'pinyinlib-build-regexp-string pys ".*"))))
(ivy--switch-buffer-matcher regexp candidates)))
(defun ivy-switch-buffer-by-pinyin ()
"Switch to another buffer."
(interactive)
(unless (featurep 'ivy) (require 'ivy))
(let ((this-command 'ivy-switch-buffer))
(ivy-read "Switch to buffer: " 'internal-complete-buffer
:matcher #'ivy-switch-buffer-matcher-pinyin
:preselect (buffer-name (other-buffer (current-buffer)))
:action #'ivy--switch-buffer-action
:keymap ivy-switch-buffer-map
:caller 'ivy-switch-buffer)))
You can M-x ivy-switch-buffer-by-pinyin
to switch buffer.
The algorithm of pinyinlib is simple. We build a big lookup table to convert the a plain English string into a regular expression containing Chinese characters.
You can apply the same algorithm to other non-English languages.