VSCode、IDE输入法中英文切换问题终极方案
中英文切换的苦与乐
苦
- 仔细想想,写代码以前,从大家人生中首次用电脑上在【Word、记事本、网页的文本区域里】这种稍微严肃的地方(聊天啊、划水啊其实要求不是很严格)写文章、大段文字开始,其实就已经开始进行大量的中英文切换了,只是相对于写代码来说没有那么频繁。
- 自从我第一天写代码起,就总是被各种IDE(集成开发环境)里需要频繁手动切换切换输入法的操作搞得焦头烂额。
- 慢慢的,也就适应了,变成了肌肉记忆。
- 但早期的IDE,或者文本编辑器、代码编辑器,在中英文切换、符号自动优化方向并没有那么智能(当然现在也是半斤八两)。他们最常见的两套组合拳就是:符号异常标红 + 保存时自动更正。缺点就是很影响编程体验,诸如因为编辑阶段未正确书写导致无法有效代码提示、打断开发思路、中断即时编译等等。
乐
与其说中英文切换优点,不如说是双语开发的优势,下图展示了【双语开发】与【全英文开发】时,开发者的不同体验。
由于中文是全角语言,英文是半角,两种语言视觉上区别较大
全角、半角的【角】指的是什么?
- 极简解释:正方形
- 详细解释:
- 日文词典《大辞林》,「角かく」作为名词有八项释义,第一项就是「四角。方形。或者四角的样子。」而「角度」这一含义放到了后面;
- 与此对比,在《现代汉语词典》(第六版)里「角jiǎo」虽然也有八项释义,却没有一项是「四角」「正方形」的意思。
- 由于在日本「角」是正方形,因此「全角/半角」就是「整个正方形/半个正方形」的意思,既通俗易懂,也是日本人在活字排版中对相应尺寸铅字的称呼。
中文(文字、符号)是全角,占一个正方形宽度,英文(文字、符号)是半角,占半个正方形宽度。自然,它们再视觉感官上就差距很大,混在一起时,能直观的看到区别,如果母语是汉语的,也会优先在大脑中解析汉语词汇的释义。而这个优点的具体体现为:
- 快速定位:对【快速定位】开发、迭代阶段极其重要的代码注释、文案十分友善,因为他们都是中文的。
- 快速理解:快速定位后,中文是表意文字,更能极简的反应意思,有助于【快速理解】
反之如果开发时是全半角环境,视觉上则不太能超快速定位到对应的代码注释、文案。
有些人会说:我的IDE里装了高反差主题,代码注释、文案颜色会不同。
- 但对于这种观点,我想说:英文还有个弊端就是冗长,这也就是英文里充斥大量缩写词的原因。所以,在一定程度上理解时间成本会高于中文,速度也相对低于中文。
半角环境开发的示例:
全英文:
/* I'm a line comment */ function handleToggleYourList(artworkId, nextSeen) {}
英文+法文:
/* Je suis une ligne de commentaires */ function handleToggleYourList(artworkId, nextSeen) {}
当然在半角环境开发里也有些特殊的语言,比如阿拉伯语,那像这类与英文视觉上区别较大的语言,在全半角语言开发中,其实也能尽量达到中英混合开发的识别度:
/* أنا ملاحظة خط الملاحظات */ function handleToggleYourList(artworkId, nextSeen) {}
当然,代码开发效率不能仅从视觉感受上简单下定论,这只是其中一个维度而已。
个人方案历程
1.0-肌肉记忆时代
- 需要频繁手动切换切换输入法,变成肌肉记忆。
- 有时候肌肉会”抽筋“,那就还有IDE的自动化兜底。
2.0-自定义标点时代
有一天,我实在厌其烦了,就开始自己总结痛点了:
输入法中英切换之痛,IDE我希望一打开就是英文输入法,其他软件我更希望默认中文输入法。
中英文符号之痛:
在IDE里写代码时,会大量使用【英文符号】,而中文主要出现在注释里、文案中。与之对应的:
- 中文注释里我使用英文符号也不会报错
- 中文文案大多都不会手打,更多的还是从需求文档复制
在IDE以外,对我来说大量的中英混写需求可能只有工作上的报告、技术文章的编写了,而这两块儿对符号要求其实不算及其严格。
解决方案:
使用输入法的自定义标点功能, 在中文半角模式(默认模式)下, 将大量的开发常用中文符号半角化、英文化(即使在中文语句中)
是的,如你所见,上面这句话我在中文语句中使用的基本是英文标点符号,在非严肃的场景下,大家并不会太在意,读者也不并不会明显的感知到
具体改动规则如下:
符号名称 键 操作 中文半角模式(默认模式) 中文全角模式 英文半角模式 英文全角模式 冒号 : 默认 : : : 仅排版时会用到,无须关心 改动后 :【有改动】 : : 仅排版时会用到,无须关心 逗号 , 默认 , , , 同上 改动后 ,【有改动】 , , 同上 ...... ...... ...... ...... ...... ...... ...... 反斜线 ==== 默认 、 、 ==== 同上 改动后 、【无改动, 原因见下一段】 、 ==== 同上
涉及到的开发常用符号,基本上囊括了所有键盘上的符号,都在中文半角时使用英文半角的符号。但以下是些特例:
- \ 反斜线,我实际开发中使用概率,要小于此键位中文半角模式对应的 顿号、 ,我会经常用来在中文注释中间隔词汇,使用反斜线时我会切换到全英输入法再打出这个符号
- [ 方括号,我实际开发中使用概率,要小于此键位中文半角模式对应的 中文方括号【 , 我会经常用来在着重强调词汇,创建数组时我会切换到全英输入法再打出这个符号
- ] 方括号,我实际开发中使用概率,要小于此键位中文半角模式对应的 中文方括号】 , 我会经常用来在着重强调词汇,创建数组时后半边括号会自动生成不用手打
自定义标点方案总结
通过系统设置给每个软件保留上次退出时的输入法
中文输入法:
- 半角模式,汉语输入;简短的英文输入;输入常规符号时,全部被我自定义为了英文半角符号。
- 全角模式,我会用来输入极少量出现的¥、—、……、· 、“、”、《、》
英文输入法:
- 半角模式,用来写代码
有了这些方案,至少我写代码不会因此卡壳、引发烦躁情绪。
但也有个缺点,就是我在IDE以外的环境就得长期忍受写中文也要用英文符号的痛苦,虽然这点可以将就。只是,在非常严肃的协作环境时我只能每次输入中文符号再切成中文全角模式,虽然这种场景极其少见。
3.0-IDE插件自动切换输入法时代
插件Smart IME
直到2023年底,我遇到了大救星:Smart IME
插件网址:https://marketplace.visualstudio.com/items?itemName=OrangeX4.vscode-smart-ime
特性
检测到前一个字符是中文时自动切换到中文输入法(默认开启,这个特性较为耗电,请仔细甄别是否要开启,以及配置触发间隔时间,默认为 2 秒);
在中文后输入一个空格自动切换到英文输入法(默认开启);
在英文后输入两个空格自动切换到中文输入法(默认未开启);
进入到注释场景时,自动切换为中文输入法,离开时自动切换为英文输入法(参考插件配置里的
comment
相关内容);进入到数学公式时,自动切换为英文输入法,离开时自动切换为中文输入法(参考插件配置里的
markup.math,meta.math
相关内容);离开字符串时,自动切换为英文输入法(参考插件里的
string
相关内容,如果要进入字符串后自动切换成中文可以自行配置);如果当前文档拥有超过 n 个英文字符且没有中文字符,则禁用插件;
- 只有在切换窗口时重新检测
当然,你也可以在文档中加入一个字符串
DISABLE_SMART_IME
(例如在注释块里写这个字符串),只要识别到当前文档有这个字符串,也会在当前文件禁用插件;
- 只有在切换窗口时重新检测;
在 Vim Normal 模式下禁用自动切换,不过目前识别 Vim Normal 模式仅是根据光标状态识别,可能存在 bug。
插件IME and Cursor
插件网址:https://marketplace.visualstudio.com/items?itemName=beishanyufu.ime-and-cursor
特性
- 适时获取当前输入语言,来相应地设置光标颜色(默认中文输入状态下光标显示为红色,可设置)或光标样式(默认未开启,可设置)。
- 添加了与 Smart IME 插件的双向通信功能,让中英文切换回到输入法内部。
总结
自从用了Smart IME,在IDE内、外更加得心应手了,具体表现为:
- IDE内,中英文输入法切换大多情况纯自动、无感知、流畅。
- IDE内,大量使用中文、英文符号的地方,直接输入即可,无需刻意切换。
- IDE外,终于可以返璞归真,重新全量使用中文符号了。