silaoA
123
使用github官网的配置
(sis-ism-lazyman-config "1033" "2052" 'im-select))
(sis-global-cursor-color-mode t) ; 不同语言输入法下光标颜色
;; enable the /respect/ mode
(setq sis-respect-evil-normal-escape t)
(sis-global-respect-mode t)
;; enable the /context/ mode for all buffers
(sis-global-context-mode t)
;; enable the /inline english/ mode for all buffers
和Evil配合时发现个问题:
1、在insert-state是中文输入状态,按ESC进入normal-state自动切换到英文正常,按i返回insert-state也被切换为英文了,而不是恢复先前的中文;
2、从emacs-state按C-z进入normal-state,没有自动切换到英文,是只识别ESC键吗?
3、Evil配置中增加 (defalias 'evil-insert-state 'evil-emacs-state) ,将insert-state替换为emacs-state后,要按2次ESC进入normal-state才会自动切英文。
环境:Windows 10, 原生GNU Emacs 28.2,无配置框架。
goumao
124
我们来排除一下
A. 首先,排除这种情况:
Tips:
- For
spacemacs
, if it works in the hybrid
mode, some of the evil
related features may not work. Change to vim
mode instead.
B. 进入insert mode是会自动根据上下文判断语言并自动切换的。如果你是在英文字母中按i,确实不会自动切换到中文。
goumao
125
跟按键无关。是由evil状态变化的hook启动的。见:
goumao
126
sis中只处理了evil-insert-state
和evil-normal-state
,由evil自带的hook启动sis相关功能,见上文的代码链接。你用的这个evil-emacs-state
并没有牵涉到。
silaoA
127
我抄官网的配置,和你这个差不多,发现从中文切到英文很容易,返回却不行。比如文本内容是“中文”,在后面输入空格,会自动切到英文,回删空格会自动切到英文,但如果不回删,只是移动光标,又不会自动切换了。
silaoA
129
那这条,从emacs-state按C-z进入normal-state,没有自动切换到英文,可能是什么原因造成?还需要在配置中再写一遍 (add-hook 'evil-insert-state-exit-hook #'sis-set-english)
吗?
我已经切换到了librime 配合rime 输入法了,macos 切换速度快有那种同步延迟。
evil-insert-state和evil-emacs-state是两个不同的state啊,你在evil-emacs-state相关的hook里加就行了
silaoA
133
在这里提的需求,sis中是否有实现?readme文档未提及。环境:Windows 10,GNU Emacs 28.2。
silaoA
134
B这种情况,根据字符中英文状态自动切换输入法,设置(sis-global-inline-mode -1)
也不能禁用。
goumao
135
比如文本内容是“中文”,在后面输入空格,会自动切到英文
这个是inline mode,在中文中在线输入英文,完了再回到中文,整个过程不需要手工切换输入法。不少用户特别喜欢这个功能。你要是不喜欢的话,不开inline mode就行了。
其实英文中在线输入中文也可以,有相关的变量可以控制。
goumao
136
silaoA
137
嗯,设置了(sis-global-inline-mode -1)
中英文输入中切换是禁用了,因为我在用的过程中发现是输完英文,移动光标到中文字符,它不会自动切到中文,就是变回英文很容易、变回中文难,不太适应。
从normal回到insert,有变量能控制不根据光标处字符直接恢复输入法吗?
goumao
138
如果你用GUI的话,可以用emacs mac-port,自带原生的输入法相关的api,不需要外部的切换工具,那个就很丝滑了。
brew tap railwaycat/emacsmacport
brew install emacs-mac --with-modules --with-rsvg --with-imagemagick --with-natural-title-bar
1 个赞
silaoA
139
在实际用的时候,由insert-state回到normal-state就是正常的,由emacs-state回到normal-state不是马上自动切到英文,要在normal-state下多按一次esc才切换,奇怪。
goumao
140
这是你不会用哈。。。
中文 English
之后,你输入两个空格,或者回车,再看看。
这个是默认的设计,但是每个人的习惯不一样,
你可以通过变量控制前后空格,几个空格触发切换等等
当时一边写这个包,一边在这里收集用户反馈,
这块的变量极其多和灵活,没有发现覆盖不了的使用习惯。
goumao
142
我前面说了,代码里面没有处理过emacs-state
(这个是啥东西?我不知道啊,是evil里面的么?),你可以参照代码自己重新定义一下相关的变量和函数。