Find the buffer with Chinese name
We can find the buffer with Chinese name efficiently by using the first character of pinyin.
(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)))
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.