update at 2025-11-09 22:04:12

This commit is contained in:
douboer
2025-11-09 22:04:12 +08:00
parent 36c97b0616
commit 172f68ac37
14 changed files with 469 additions and 1431 deletions

256
README.md
View File

@@ -1,16 +1,26 @@
# Vim 输入法自动切换插件
[![Version](https://img.shields.io/badge/version-2.0.3-blue.svg)](./CHANGELOG.md)
[![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey.svg)](#安装要求)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE.txt)
[English](./README_en.md) | 中文
这是为 原生Vim 和 Obsidian 编辑器的 Vim 模式设计的输入法自动切换插件,包含:
- **Obsidian 插件**:适用于 Obsidian 编辑器的 Vim 模式
- **Vim 插件**:适用于原生 Vim/NeoVim 编辑器
> 🚀 **智能输入法管理工具** - 为 Vim 用户打造的无感知输入法切换体验
## 功能简介
这是为 **原生 Vim****Obsidian 编辑器** 的 Vim 模式设计的智能输入法自动切换插件,包含:
- 自动切换输入法:在 Vim 的 Normal 模式和 Insert 模式之间切换时,自动切换输入法
- 智能记忆:记住上次 Insert 模式退出时的输入法状态,下次进入时自动恢复
- 无缝体验:在 Insert 模式下正常输入文本时不会触发输入法切换
- 🎯 **Obsidian 插件**:适用于 Obsidian 编辑器的 Vim 模式
- **Vim 插件**:适用于原生 Vim/NeoVim 编辑器
- 🌍 **跨平台支持**macOS、Linux、Windows 全平台兼容
## ✨ 功能亮点
- 🔄 **自动切换输入法**:在 Vim 的 Normal 模式和 Insert 模式之间切换时,自动切换输入法
- 🧠 **智能状态记忆**:记住上次 Insert 模式退出时的输入法状态,下次进入时自动恢复
- 🎭 **无感知体验**:完全静默切换,无 UI 闪烁或延迟
- 🌐 **中英混合友好**:完美支持中英文混合输入场景
-**多重保障机制**:三层检测确保切换的可靠性
## 核心特性
### 1. 模式切换自动化
@@ -23,10 +33,19 @@
- 支持中英文混合输入场景
### 3. 智能检测机制
插件使用多重检测机制确保可靠性:
- **键盘事件监听**(主要):使用事件捕获模式监听 ESC 和 Insert 按键
- **CodeMirror 事件**(辅助):监听 vim-mode-change 事件
- **定时轮询**兜底100ms 轮询检测模式变化
插件采用**三重检测机制**确保可靠性:
| 检测方式 | 优先级 | 说明 |
|---------|--------|------|
| 🎯 **键盘事件监听** | 最高 | 使用事件捕获模式监听 ESC 和 Insert 按键,响应最快 |
| 🔧 **CodeMirror 事件** | 中等 | 监听 vim-mode-change 事件,处理非按键触发的模式切换 |
| 🔄 **定时轮询** | 兜底 | 100ms 轮询检测模式变化,作为最后保障机制 |
### 4. 技术特性
-**异步处理**:使用 `job_start()` 异步执行,避免 UI 阻塞
- 🛡️ **防抖机制**100ms 防抖避免重复处理
- 🎯 **事件捕获优化**:使用 capture 模式确保最快响应
- 🔧 **自动检测**:智能检测和配置中文输入法
## 安装要求
@@ -56,22 +75,21 @@ sudo pacman -S fcitx
```
#### Windows
下载并安装 AutoHotKey 版本的 fcitx-remote
- [下载 fcitx-remote.exe](https://github.com/yuanotes/obsidian-vim-im-switch-plugin/releases/download/1.0.3/fcitx-remote.exe)
- 将 exe 文件放到系统 PATH 路径中
使用项目内置的 AutoHotkey 脚本
1. 安装 [AutoHotkey](https://www.autohotkey.com/)
2. 使用项目中的 `fcitx-remote.ahk` 脚本
3. 或下载编译好的版本:[fcitx-remote.exe](https://github.com/yuanotes/obsidian-vim-im-switch-plugin/releases/download/1.0.3/fcitx-remote.exe)
4. 将 exe 文件放到系统 PATH 路径中
## 安装插件
### Obsidian 插件安装
1. 下载插件文件到 Obsidian 插件目录:
- 方法一:
```bash
cd /path/to/your/vault/.obsidian/plugins/
git clone https://biboer.cn/gitea/gavin/vim-im-switch
git clone https://github.com/yourusername/vim-im-switch.git
```
- 方法二(简单):
把 vim-im-switch 目录复制到/path/to/your/vault/.obsidian/plugins/目录下。
2. 在 Obsidian 中启用插件:
- 打开设置 → 社区插件 → 浏览
@@ -88,7 +106,7 @@ sudo pacman -S fcitx
1. 复制插件文件到 Vim 配置目录:
```bash
mkdir -p ~/.vim/plugin
cp fcitx-osx.vim ~/.vim/plugin/
cp vim-im-switch.vim ~/.vim/plugin/
```
2. 重启 Vim插件会自动加载
@@ -103,14 +121,32 @@ sudo pacman -S fcitx
" let g:fcitx_chinese_im = 'com.tencent.inputmethod.wetype.pinyin'
```
### 一键部署(推荐)
#### 使用插件管理器安装
使用部署脚本同时安装两个插件:
**vim-plug**:
```vim
Plug 'yourusername/vim-im-switch'
```
**Vundle**:
```vim
Plugin 'yourusername/vim-im-switch'
```
### 🚀 一键部署(推荐)
使用部署脚本同时安装 Obsidian 插件和 Vim 插件:
```bash
# 克隆项目
git clone https://github.com/yourusername/vim-im-switch.git
cd vim-im-switch
# 构建并部署
npm install
./deploy.sh
```
Note: v2.0.2 fixes a terminal-specific title/flash issue when using terminal Vim (see CHANGELOG for details).
> 💡 **提示**: v2.0.2 修复了终端 Vim 中的标题闪烁问题,详见 [更新日志](./CHANGELOG.md)
## 使用方法
@@ -162,51 +198,157 @@ graph TD
插件维护一个状态机,跟踪 Vim 模式和输入法状态,在模式转换时自动切换输入法,同时保留用户偏好设置。
## 故障排除
## 🔧 故障排除
### 问题:插件没有效果
1. 检查 fcitx-remote 是否正确安装
2. 检查插件日志(开发者控制台)
3. 验证输入法名称是否与设置匹配
### 问题:输入法切换不正确
1. 确认设置中的输入法名称正确
2. 手动切换输入法后,在开发者控制台查看日志
3. 检查是否有其他插件冲突
## 开发
### 构建
### 快速诊断
使用内置诊断脚本:
```bash
./diagnose-im.sh
```
### 常见问题
#### 🚫 插件没有效果
1. **检查依赖**:确认 fcitx-remote 是否正确安装
```bash
# macOS
fcitx-remote -n
# Linux
which fcitx-remote
# Windows
fcitx-remote.exe
```
2. **检查日志**
- **Obsidian**: 开发者控制台 (Ctrl+Shift+I)
- **Vim**: `:messages` 命令
3. **验证配置**:确认输入法名称与系统设置匹配
#### ⚠️ 输入法切换不正确
1. **获取正确的输入法名称**
```bash
# 切换到中文输入法后执行
fcitx-remote -n
```
2. **手动测试**
```bash
# 切换到英文
fcitx-remote -s com.apple.keylayout.ABC
# 切换到中文(替换为你的输入法名称)
fcitx-remote -s com.tencent.inputmethod.wetype.pinyin
```
3. **检查冲突**:暂时禁用其他 Vim 插件测试
#### 🐛 其他问题
- **权限问题**:确保 fcitx-remote 有执行权限
- **路径问题**:检查 fcitx-remote 是否在 PATH 中
- **版本兼容**:确认 Vim 版本支持 `job_start()` (Vim 8+)
## 🛠️ 开发指南
### 环境要求
- Node.js 14+
- TypeScript 4.2+
- Rollup (构建工具)
### 构建项目
```bash
# 安装依赖
npm install
# 开发模式(监听文件变化)
npm run dev
# 生产构建
npm run build
```
### 部署
一键部署 Obsidian 插件和 Vim 插件:
```bash
./deploy.sh
### 项目结构
```
vim-im-switch/
├── main.ts # Obsidian 插件主文件
├── vim-im-switch.vim # Vim 插件文件
├── fcitx-remote.ahk # Windows 支持脚本
├── fcitx-remote-for-osx/ # macOS 支持工具
├── deploy.sh # 一键部署脚本
├── diagnose-im.sh # 诊断脚本
└── vim-im-switch-plugin/ # 构建输出目录
```
### 调试
### 调试方法
#### Obsidian 插件
#### Obsidian 插件调试
插件会在控制台输出关键日志:
- `Loading plugin...` - 插件加载
- `ESC → English` - ESC 切换到英文
- `→ Chinese` - 切换到中文
- `Error...` - 错误信息
#### Vim 插件
在 Vim 中查看消息:
```vim
:messages
```
🚀 [VimIMSwitch] Loading plugin...
🔤 [VimIMSwitch] ESC → English (saved Chinese)
🈳 [VimIMSwitch] → Chinese
❌ [VimIMSwitch] Error: ...
```
## 更新日志
查看 [CHANGELOG.md](./CHANGELOG.md) 获取详细的版本更新历史。
#### Vim 插件调试
```vim
" 查看插件消息
:messages
## 相关链接
- [更新日志](./CHANGELOG.md)
- [English Documentation](./README_en.md)
- [fcitx-remote-for-osx](https://github.com/xcodebuild/fcitx-remote-for-osx)
" 检查插件是否加载
:echo exists('g:fcitx_remote')
" 手动测试函数
:call Fcitx2en()
:call Fcitx2zh()
```
### 贡献指南
1. Fork 项目
2. 创建功能分支:`git checkout -b feature/amazing-feature`
3. 提交更改:`git commit -m 'Add amazing feature'`
4. 推送分支:`git push origin feature/amazing-feature`
5. 提交 Pull Request
## 📋 版本历史
| 版本 | 日期 | 主要更新 |
|------|------|----------|
| [v2.0.3](./CHANGELOG.md#203---2025-11-09) | 2025-11-09 | 修复 Normal 模式 ESC 键问题 |
| [v2.0.2](./CHANGELOG.md#202---2025-11-04) | 2025-11-04 | 修复终端兼容性问题 |
| [v2.0.0](./CHANGELOG.md#200---2025-11-04) | 2025-11-04 | 新增 Vim 原生插件支持 |
| [v1.0.8](./CHANGELOG.md#108---2025-01-04) | 2025-01-04 | 智能状态记忆功能 |
| [v1.0.0](./CHANGELOG.md#100---2024-06-01) | 2024-06-01 | 首次发布 |
查看 [完整更新日志](./CHANGELOG.md) 获取详细的版本更新历史。
## 🔗 相关链接
- 📖 [English Documentation](./README_en.md)
- 📝 [更新日志](./CHANGELOG.md)
- 🛠️ [fcitx-remote-for-osx](https://github.com/xcodebuild/fcitx-remote-for-osx)
- 🐛 [问题反馈](https://github.com/yourusername/vim-im-switch/issues)
- 💡 [功能建议](https://github.com/yourusername/vim-im-switch/discussions)
## 📄 许可证
本项目采用 [MIT 许可证](./LICENSE.txt)。
## 🙏 致谢
感谢以下项目和贡献者:
- [fcitx-remote-for-osx](https://github.com/xcodebuild/fcitx-remote-for-osx) - macOS 输入法控制工具
- [Obsidian](https://obsidian.md/) - 强大的知识管理工具
- [Vim](https://www.vim.org/) / [NeoVim](https://neovim.io/) - 经典的文本编辑器
---
<div align="center">
**如果这个项目对你有帮助,请给个 ⭐ Star**
Made with ❤️ for Vim users
</div>