update at 2025-11-11 18:14:34

This commit is contained in:
douboer
2025-11-11 18:14:34 +08:00
parent 00f4c75366
commit ece6bff2bb
4 changed files with 9 additions and 167 deletions

View File

@@ -6,10 +6,14 @@
[English](./README_en.md) | 中文
[感谢 github 中的 vim-im-switch这个项目](https://github.com/yourusername/vim-im-switch)
这个项目不能满足需求,在这个项目基础上改进。
作者Gavin Chan
> 🚀 **智能输入法管理工具** - 为 Vim 用户打造的无感知输入法切换体验
这是为 **原生 Vim****Obsidian 编辑器** 的 Vim 模式设计的智能输入法自动切换插件,包含:
- 🎯 **Obsidian 插件**:适用于 Obsidian 编辑器的 Vim 模式
-**Vim 插件**:适用于原生 Vim/NeoVim 编辑器
- 🌍 **跨平台支持**macOS、Linux、Windows 全平台兼容
@@ -329,12 +333,7 @@ vim-im-switch/
- 📖 [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)。
- 🐛 [问题反馈](https://github.com/yourusername/vim-im-switch
## 🙏 致谢

52
main.js

File diff suppressed because one or more lines are too long

59
main.ts
View File

@@ -1,4 +1,4 @@
import { App, Modal, Notice, Plugin, PluginSettingTab, Setting, Workspace, MarkdownView, TFile, WorkspaceLeaf } from 'obsidian';
import { App, Plugin, PluginSettingTab, Setting, MarkdownView, TFile, WorkspaceLeaf } from 'obsidian';
import { exec } from "child_process";
import { promisify } from "util";
import * as CodeMirror from 'codemirror';
@@ -50,30 +50,6 @@ export default class VimIMSwitchPlugin extends Plugin {
this.addSettingTab(new IMSwitchSettingTab(this.app, this));
this.addCommand({
id: 'test-im-switch-to-english',
name: 'Test: Switch to English',
callback: () => {
this.deactivateIM();
}
});
this.addCommand({
id: 'test-im-switch-to-chinese',
name: 'Test: Switch to Chinese',
callback: () => {
this.activateIM();
}
});
this.addCommand({
id: 'test-check-im-status',
name: 'Test: Check IM Status',
callback: () => {
this.getFcitxRemoteStatus();
}
});
this.app.workspace.on('file-open', async (file: TFile) => {
if (!this.initialized) {
await this.initialize();
@@ -154,34 +130,6 @@ export default class VimIMSwitchPlugin extends Plugin {
}
}
setupVimModePolling() {
// 防止重复设置轮询
if ((this as any).vimModePollingInterval) {
clearInterval((this as any).vimModePollingInterval);
}
let lastMode = "";
const pollInterval = setInterval(() => {
if (!this.cmEditor) {
return;
}
try {
const realCM = (this.cmEditor as any).cm;
const currentMode = realCM?.state?.vim?.mode || "";
if (currentMode && currentMode !== lastMode) {
this.onVimModeChange({ mode: currentMode });
lastMode = currentMode;
}
} catch (error) {
// 忽略轮询错误
}
}, 100);
(this as any).vimModePollingInterval = pollInterval;
}
setupObsidianEditorEvents() {
if (this.keyboardListenerSetup) {
return;
@@ -335,11 +283,6 @@ export default class VimIMSwitchPlugin extends Plugin {
this.cmEditor.off("vim-mode-change", this.onVimModeChange);
}
// 清理轮询定时器
if ((this as any).vimModePollingInterval) {
clearInterval((this as any).vimModePollingInterval);
}
// 清理键盘事件监听器
if ((this as any).obsidianKeyDownListener) {
document.removeEventListener('keydown', (this as any).obsidianKeyDownListener, { capture: true });

File diff suppressed because one or more lines are too long