# Smart IME Switch **Repository Path**: wangqin.tracker/smart-ime-switch ## Basic Information - **Project Name**: Smart IME Switch - **Description**: IntelliJ IDEA 插件:根据光标位置自动切换输入法,写代码切英文,写注释切中文,支持 Windows/macOS/Linux - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-06-05 - **Last Updated**: 2026-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Smart IME Switch > IntelliJ IDEA 插件 —— 根据光标上下文自动切换输入法,编码时切英文,写注释时切中文,告别手动切换。 ## 功能特性 **智能上下文感知** 插件通过 PSI(Program Structure Interface)实时分析光标所在的语法元素类型,自动判断当前应使用的输入法: | 光标位置 | 输入法 | 光标颜色 | |---------|--------|---------| | 代码区域 | 英文 | 蓝色 `#0066FF` | | 注释区域(`//`、`/* */`、`/** */`) | 中文 | 红色 `#FF3300` | | 字符串字面量(`""`、`''`、`` `` ``) | 中文 | 红色 `#FF3300` | **手动切换感知** 当你在代码区手动按 Shift 切换到中文后,插件会立即检测到状态变化并自动切回英文,无需先移到注释区再移回来。 **光标颜色指示** 通过光标颜色直观显示当前输入模式,状态栏同步显示 `EN` / `中` 标识,点击状态栏可手动切换。 **跨平台支持** | 平台 | 切换方式 | |------|---------| | Windows | IMM32 API(`ImmSetOpenStatus`),兼容所有标准 IME(微软拼音、搜狗、小狼毫等) | | macOS | AppleScript 切换输入源 | | Linux | 支持 IBus、Fcitx5、Fcitx4 输入法框架 | ## 安装 ### 从 JetBrains Marketplace 安装(即将上线) 在 IDE 中打开 `Settings → Plugins → Marketplace`,搜索 **Smart IME Switch**。 ### 手动安装 1. 前往 [Releases](../../releases) 下载最新的 `.zip` 文件 2. 打开 IDE,进入 `Settings → Plugins` 3. 点击齿轮图标 → `Install Plugin from Disk...` 4. 选择下载的 `.zip` 文件,重启 IDE ## 配置 进入 `Settings → Tools → Smart IME Switch` 打开设置面板。 ### General - **自动切换开关**:启用/禁用自动输入法切换 - **光标颜色**:分别设置英文和中文模式下的光标颜色(支持取色器) - **防抖延迟**:控制切换的灵敏度(默认 100ms,范围 50-2000ms) ### Advanced (Windows) - **键盘布局 ID**:英文布局(默认 `00000409` = US English)和中文 IME 布局(默认 `00000804` = 微软拼音) - **检测布局**:点击 "Detect Available Layouts" 自动扫描系统已安装的键盘布局 - **IME 切换快捷键**:输入法内部的中英文切换快捷键(默认 `Shift`,也支持 `Ctrl+Space` 等组合键) ## 从源码构建 ### 环境要求 - JDK 17+ - Gradle 8.4+(项目自带 Gradle Wrapper) ### 构建命令 ```bash # 编译 ./gradlew compileKotlin # 在沙箱 IDE 中运行调试 ./gradlew runIde # 打包发布 ./gradlew buildPlugin ``` 构建产物位于 `build/distributions/smart-ime-switch-.zip`。 ## 技术实现 ``` 光标移动 (CaretEvent) │ ▼ 同步系统 IME 状态 (ImmGetOpenStatus) ◄── 检测手动切换 │ ▼ PSI 上下文检测 (PsiContextDetector) ◄── 分析代码/注释/字符串 │ ▼ 决策 & 切换 (InputMethodService) ◄── 带防抖的输入法切换 │ ├── 更新光标颜色 (CaretColorManager) ├── 更新状态栏 (StatusWidget) └── 切换 IME (Windows/Mac/Linux) ``` 核心设计要点: - **IMM32 直连**:Windows 平台通过 JNA 调用 `ImmSetOpenStatus` / `ImmGetOpenStatus`,直接控制 IME 开关状态,兼容所有遵循 Windows IMM32 标准的输入法 - **PSI 语法树分析**:利用 IntelliJ 的 PSI 框架沿 AST 向上遍历,准确识别注释和字符串上下文 - **事件驱动**:基于 `CaretListener` 实时响应,光标移动即触发检测,无轮询开销 - **持久化配置**:基于 IntelliJ `PersistentStateComponent`,设置跨 IDE 重启保留 ## 兼容性 - IntelliJ IDEA 2023.2+(Build 232+) - 基于 IntelliJ Platform 的 IDE(WebStorm、PyCharm、GoLand 等) ## 致谢 本项目的核心思路参考了 [SmartIM](https://xiaolvpuzi.cn/docs/index.html) 插件的输入法自动切换功能。 ## License [Apache License 2.0](LICENSE)