Windows中用putty登录linux下的emacs中,如何实现快捷键的中英文自动识别切换?

我用的操作系统是windows,但是常常使用putty登录linux主机,在terminal下使用emacs编辑中英文混合的文档。 :sweat_smile:

现在有个问题很闹心,那就是在使用快捷键时,如果全程加ctrl、alt还好,像m-g m-g之类的没问题,问题是很多快捷键只能是c-h t 这种形式,单独的字母键会直接呼出中文待选单,我又常常混输中英文,不是每次都能记住使用快捷键时处在哪个状态,这就造成快速输入时常常卡住,非常麻烦,请问有没有办法在我输入第一个快捷键时就自动切换成英文,等快捷键功能执行完后自动返回之前的输入法状态?

你用的输入法应该还是Windows 系统下的吧? sis + im-select 应该可以解决。

1 个赞

谢谢,马上就去试试 :+1:

记得绑定一个按键到 sis-switch ,用于进行手动输入法切换,不要直接用 M-x,sis-switch

2 个赞

我按照github上的readme安装好了,可是完全没反应。 环境是windows下的msys2中的emacs,用的是原生模式,输入法也只剩下英文一项和中文一项,im-select得到的结果就是1033和2052, 配置文件如下:

(setq package-archives '(("gnu"   . "http://mirrors.tuna.tsinghua.edu.cn/elpa/g\
nu/")
                         ("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/m\
elpa/")))
(package-initialize) ;; You might already have this line
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages '(sis)))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )
(sis-ism-lazyman-config "1033" "2052" 'im-select)

请指点一下是哪里没弄好?

没什么特别的设置,建议你用 use-package 来安装。可以参考我的配置。

我之所以绑定的是 Ctrl + f9,是因为我用了 AHK 模拟 大写键 映射到 Ctrl+f9, 这样我可以通过按CapsLock来切换输入法。你可以将 Ctrl+ f9 改为你要的按键就好了。

1 个赞

还是没用,这是我的全配置文件.emacs。 :sob:

(require 'package)
(add-to-list 'package-archives '("gnu"   . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/"))
(add-to-list 'package-archives '("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/"))
(package-initialize)

(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(eval-and-compile
  (setq use-package-always-ensure t
        use-package-expand-minimally t))
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages '(use-package sis)))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )
(use-package sis
  :bind("C-<f9>" . sis-switch)
  :config
  (sis-ism-lazyman-config "1033" "2052" 'im-select)
  )
(require 'package)
(add-to-list 'package-archives '("gnu"   . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/"))
(add-to-list 'package-archives '("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/"))
(package-initialize)

(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(eval-and-compile
  (setq use-package-always-ensure t
        use-package-expand-minimally t))

(use-package sis
  :bind("C-<f9>" . sis-switch)
  :config
  (sis-ism-lazyman-config "1033" "2052" 'im-select)
  (sis-global-respect-mode t)
  (sis-global-context-mode t)
  (sis-global-inline-mode t)
  )

改成上面这样,保存到 init.el 文件,然后放到 HOME 目录下的 .emacs.d 文件夹,删除你的 .emacs 文件。

Windows 的 HOME 目录不同系统可能会不一样,我是 Windows 10,设置到了个人用户目录下,在环境变量中加入HOME变量名 ,变量值为:%USERPROFILE% , 也就是 C:\Users\用户名

1 个赞

谢谢,问题终于解决了。 :smile:

我用的是msys2上的emacs,直接放到~/.emacs.d/里就好了。 Windows原生的那个也试了试,同样成功了。

用了好一会儿,发现了个新问题:

那就是切换到中文后,有时候打字打快了就打不出来,然后就会出现这种“中第\344\270\270\252”字符。

请问有办法解决吗? :laughing:

估计你打的这些字符是表情符号吧?

你要安装一下 Symbola 这个字体也许可以解决。不然的话,得设置一下表情符号的显示字体为 Segoe UI Symbol

这是我的字体设置,供参考

不是表情,就是想打“中第一个……“这行字,但是打着打着就不出来了,然后就变成了这种反斜杠+数字的形式。

不确定你的是什么问题。你可以录屏看看是什么效果。 sis 只管切换输入法,用上面的配置的话,打中文的时候如果按空格,会自动切成英文,这是正常行为。

我发现是msys2中的emacs的问题,刚刚在win中用原生的runemacs好像就没问题。

别外附上msys2中emacs出问题时的图,这里面一直在打的就是“对”字,打出来的是“\257\271”。

==============================

问题解决了,是msys2的编码配置问题。