我给 Visual Studio 做了个自动切换中英文输入法的小插件
写代码的时候,有一个问题不算大,但真的挺烦:刚刚还在写中文注释,下一秒开始写代码,输入法却还停在中文;代码写完回到注释,又得手动切回中文。
尤其是使用微软拼音、搜狗输入法这类中文输入法时,输入法的“中文模式”和“英文模式”是在同一个输入法里面切换的。一天按很多次快捷键,时间长了很容易打断思路。
所以我做了一个 Visual Studio 扩展,名字叫 Smart Input。它的事情很简单:看一下当前光标是在代码、注释还是字符串里,然后尽量把输入法切到合适的状态。
项目地址:Ysm-04/SmartInput-for-Visual-Studio
先说结论
Smart Input 当前专注于 Visual Studio,适用于 Windows 10/11 和 Visual Studio 2022/2026。
它目前支持:
- 代码区域自动切换到英文输入状态
- 注释正文自动切换到中文输入状态
- 字符串中包含中文时切换到中文输入状态
- 空字符串和纯英文字符串保持英文输入状态
- C# 插值字符串中的表达式继续按代码规则处理
- 支持微软拼音和搜狗拼音
- 左下角状态栏显示当前扩展状态
- 点击状态栏临时暂停或恢复自动切换
- 通过“工具”菜单暂停或恢复自动切换
- 在“工具 > 选项 > Smart Input > 常规”中配置长期设置
- 自定义手动覆盖时的光标颜色
- 自定义状态栏文字颜色
- 可以关闭状态栏显示,但仍然可以通过“工具”菜单控制暂停状态
最重要的是:永久免费、开源、没有广告,也不需要注册账号。
它主要解决什么问题
平时写 C#、C++ 或 C 代码,大概会遇到这样的过程:
写代码 -> 切英文
写注释 -> 切中文
回到代码 -> 再切英文
如果只是偶尔写几行,手动切换当然没什么。但每天写几个小时代码时,这些操作会不断打断输入节奏。
Smart Input 的目标不是替你完成输入,也不是修改你写出来的内容,而是根据编辑器上下文处理输入法的中英文状态,让“写代码”和“写注释”之间的切换自然一点。
它是怎么判断的
扩展会分析光标附近的代码上下文,区分几种常见情况。
| 当前区域 | 默认输入状态 |
|---|---|
| 普通代码 | 英文 |
| 字符字面量 | 英文 |
| 单行注释 | 中文 |
| 多行注释 | 中文 |
| 三斜线注释 | 中文 |
| 包含汉字的字符串文本段 | 中文 |
| 空字符串 | 英文 |
| 纯英文字符串 | 英文 |
| C# 插值表达式 | 英文,表达式里的注释和字符串单独判断 |
比如下面这段代码:
// 这里适合写中文说明
var message = "hello";
var title = $"用户名称:{user.Name}";
第一行注释会切到中文输入状态,普通代码和纯英文字符串保持英文。插值字符串中的中文文本可以进入中文状态,但 {user.Name} 这样的表达式仍然按照代码区域处理。
它不是完整的 C# 或 C++ 编译器,复杂的预处理器拼接、不完整语法和部分特殊插值格式仍然可能存在识别偏差。这个边界在 README 和验证文档里也有说明。
支持哪些输入法
当前版本重点适配了:
- 微软拼音
- 搜狗输入法
Smart Input 只切换当前中文输入法内部的中英文状态,不会安装输入法,不会主动切换键盘布局,也不会替用户修改系统输入法快捷键。
如果电脑上没有识别到微软拼音或搜狗输入法,扩展不会猜测,也不会随便向系统发送切换请求。
手动切换不会被强行抢回去
自动切换类工具最容易让人不舒服的地方,就是用户刚刚手动切换完,工具马上又切回去了。
Smart Input 对这个情况做了专门处理:如果检测到你手动改变了输入状态,它会把这次选择当作当前文本区域的手动覆盖,不会在同一片区域持续输入时立刻抢回自动规则。
等你切回推荐状态、离开这片区域、切换文档或编辑器失去焦点后,自动规则才会重新接管。
扩展也不会拦截或模拟 Shift。到底使用 Shift、Ctrl+空格还是其他快捷键,以你在输入法里实际配置的方式为准。
状态栏和设置
安装后,编辑器底部左下角会显示 Smart Input 状态按钮。点击它可以临时暂停或恢复自动切换。
如果不想显示状态栏,也可以在设置里关闭。关闭之后,临时暂停功能仍然可以从“工具”菜单使用:
工具 > Smart Input: 暂停自动切换
工具 > Smart Input: 恢复自动切换
长期设置位于:
工具 > 选项 > Smart Input > 常规
可以设置:
- 是否启用自动切换
- 是否显示左下角状态栏
- 手动覆盖时的光标颜色
- 是否自定义状态栏文字颜色
- 状态栏文字颜色
“启用自动切换”是长期设置,适合决定是否使用这项功能;状态栏和“工具”菜单里的暂停是临时控制,适合临时写一段特殊内容或排查问题。两者不是一回事。
我为什么还做了光标颜色
有些 Visual Studio 主题比较暗,或者使用了透明、半透明类插件,底部状态文字和光标不容易看清。
所以 Smart Input 提供了手动覆盖时的光标颜色和状态栏文字颜色设置。颜色只作用于扩展自己的视觉提示,不会修改正文颜色、主题格式或 Visual Studio 的全局字体颜色配置。
当扩展暂停、关闭文档、编辑器失去焦点或手动覆盖结束时,它会移除自定义光标装饰,恢复原生光标。
安全和隐私
这是一个本地 Visual Studio 扩展,设计上不需要联网。
它不会:
- 上传源码
- 记录按键
- 采集候选词
- 修改源文件内容
- 自动替换中文标点
- 安装或修改输入法
- 修改系统全局输入法设置
它只在 Visual Studio 自己的编辑器获得键盘焦点,并且确认识别到支持的输入法后,才会尝试读取或切换输入状态。
大文件也不会无限分析。超过 2MB 的文件不会自动进行上下文分析,后台分析过程中如果文档内容更新,旧快照会被取消。
和 VS Code 里的同类工具有什么区别
VS Code 里面已经有一些免费或开源的输入法切换扩展,例如:
这些项目各有自己的定位,有的依赖外部工具,有的主要服务 VSCodeVim,有的支持多种编辑器或多个操作系统。
Visual Studio 这边能直接使用的同类工具相对少一些,所以 Smart Input 目前把重点放在 Visual Studio 原生体验上:直接通过 Visual Studio 扩展机制接入编辑器、设置页、状态栏和工具菜单,不要求额外安装脚本或辅助程序。
我不打算把“支持 VS Code”写成当前版本的承诺。之后是否扩展到其他编辑器,会根据实际使用反馈、维护成本和能不能做出真正有区别的体验来决定。先把 Visual Studio 版本做好,比列出一堆还没有完成的计划更实在。
免费和开源
Smart Input 采用 MIT License 开源。
这意味着项目可以免费使用、修改和分发,适合个人开发、学习和团队使用。项目不会因为版本升级突然增加基础功能收费,也不会通过广告或账号系统影响使用。
当然,项目依赖的第三方组件、Visual Studio 本身、输入法软件和相关商标,仍然遵循它们各自的许可和使用条款。
后续我会继续根据实际反馈完善功能、修复兼容性问题,并考虑加入更实用的能力。但新功能会优先围绕输入法切换的稳定性、识别准确度和日常使用体验展开,不为了堆功能而堆功能。
安装方式
当前版本可以从 GitHub Release 下载 VSIX 安装包:
下载 SmartInput.VisualStudio.vsix
安装步骤:
- 下载 VSIX 文件。
- 双击运行,或在 Visual Studio 的扩展管理功能中选择从 VSIX 安装。
- 安装完成后重启 Visual Studio。
- 打开 C#、C++ 或 C 文件进行测试。
- 到
工具 > 选项 > Smart Input > 常规检查设置。
当前 Release 没有做代码签名。如果安装程序显示未知发布者,可以先核对下载来源和文件 SHA256:
79C25E4FB6F0BD0C1DB7ED3D1F01267421664E69108612E5CF8EB173F237480B
当前版本
当前发布版本是 0.2.0。
项目已经完成以下验证:
- 104 项自动化测试通过
- VSIX 包结构校验通过
- Windows 10/11 实机验证
- Visual Studio 2022/2026 实机验证
- 微软拼音和搜狗输入法验证
- 代码、注释、字符串、候选窗口、Escape、手动覆盖和连续输入场景验证
当然,输入法和 Visual Studio 的组合很多,实际电脑环境也各不相同。如果遇到问题,欢迎在 GitHub 提交 Issue。反馈时最好带上 Windows 版本、Visual Studio 版本、扩展版本、输入法版本、操作步骤和实际表现,但不要上传私人源码、候选词或完整按键记录。
最后
Smart Input 不是一个很复杂的“大而全”工具,它就是想把写代码时反复切换输入法这件小事处理得顺手一点。
如果你平时使用 Visual Studio,同时经常在中文注释和英文代码之间来回切换,可以试试看。觉得有用就留着用,遇到问题可以提 Issue,想改代码也可以直接参与项目。
Comments NOTHING