中文输入法下使用Emacs的问题

问题: 用中文输入法打着字. 然后,要切换Buffer.快捷键 C-x b. 按完 C-x 之后,准备按 b,发现当前输入法是中文.按了 b 没反应. 需要 Ctrl+Space 先切回英文,再来一遍 C-x b. 或者每次再键入 emacs 命令时,都要按一次 Ctrl+Space 先切换输入法状态到英文. 整个流程感觉很不爽. 不够顺畅.

大家在使用的时候,会遇到这种问题吗?有好的解决方案吗?

太好了. 一直以来就有这个疑问, 只是表述不清. 不知道怎么提问. 现在终于看到这个问题了. 支持一下…

搬个小板凳, 静待高手解读.

  1. 使用内置输入法 pyimEmacs-rime

  2. 使用 smart-input-source ,有关讨论见:

我在中文输入法下emacs用得多,英文用得少,甚至以前大写字母都输入得很少,为更好的在中文输入法下面用,甚至把快捷键都改了。实现了在做切换中英文输入状态这一步的同时把快捷键操作也一并执行了。

举例:我在中文输入法下,想把光标上移两行回到行首,emacs的通常用法是ctrl+p,ctrl+p,ctrl+a,我的用法是在中文输入法下直接打PPA,然后按shift,PPA直接上屏但不会输入,而是光标上移两行回到行首(在第三方输入法下配置成用shift切换中英文并上屏当前字母)

现在主流输入法都支持shift切换中英文,楼主没必要在用Ctrl+Space了吧

2赞

不知道能不能象vim那样, 在insert是中文输入, 退出成为normal的时候, 自动变成英文输入.

三楼已经给出解决方案了。 如果你是希望用系统的输入法,推荐你用smart-input-source
其实这种问题在论坛搜索一下都有答案了。

个人用的是 fcitx + rime, fcitx-remote -c 可以用来关闭 fcitx。

对我而言,因为是通过 hydra 使用的 find-file 之类的函数,所以只要每次调用 find-file 之前调用 fcitx-remote -c 即可,比如

(global-set-key (kbd "M-<SPC>")
                #'(lambda ()
                    (interactive)
                    (call-process "fcitx-remote" nil nil nil "-c")
                    (hydra-f1/body)))

其他很多需要关闭输入法的地方都是类似的处理方式。

M-x

:bind (("M-x" . (lambda () (interactive)
                (call-process "fcitx-remote" nil nil nil "-c")
                (counsel-M-x))))

其实没有这么多必要纠结……直接按一次 C-SPC 再切换就就好了(在emacs下不怎么用中文输入的用户小声bb

使用 smart-input-source

用中文输入法打着字. 然后,要切换Buffer.快捷键 C-x b. 按完 C-x 之后 smart-input-source 会将中文临时变成英文并且会记录当前buffer的输入法状态(为中文), 此时按 b 则不会出现输入法中文,再从别的buffer返回时,该buffer的输入法状态会被还原回中文,中间完全不用Ctrl+space切换中英文状态。看下面gif里 输入法状态变化,完全自动切换,这个sis包是真的好用

我试了一下sis,感觉切换的时候有点卡。。不是太理想。。不知道是不是我自己的问题。

你是什么操作系统上用?估计是你的某些配置造成的,我在Windows和Mac下用sis 都是很流程的,没有一点延迟。

修改emacs源代码,让emacs原生支持输入法的中英文切换 中英文切换,在windows上28.0.50最新的pretest版本或者自己从master分支上编译的,可以试试,功能和vim一样,很简单。

win10呢。延迟还挺明显的。

我也是主要在Win10上用,你试试更改一下中文字体有没效果。实在不行,你可以考虑试试楼上说的方案,如果你用evil-mode的话。