造轮子: Vim 输入法切换插件

2020-02-18 17:22:34 +08:00
 Neur2n

Q:为什么造轮子? A: 纯粹手痒。

我用过 VimIM,但是切换的时候很卡,也许是电脑不行。做过一些搜索,比如 vim-barbaric 和 vim-xkbswitch 等,要么没有支持 Windows (或者要另外安装 binary ),要么文档太长不想看。所以自己写了一个很简单的,也没有考虑复杂的特性或可能存在的性能隐患,因为还有没用户反馈。先上图。

但是目前还有不少限制:

  1. Windows 只能在 10 上运行,10 以下的没试过,也许通过配置可以运行。
  2. Windows 10 上需要 Python 3、pynvim、pywin32
  3. Linux 里只在 Ubuntu 16.04 上测试过,而且调用的是 ibus (似乎不少人喜欢用 fcitx )
  4. 没有在 Mac 环境进行开发

项目页面: https://github.com/Neur1n/neuims (文档还没补全 :p )

望不吝赐教。

5104 次点击
所在节点    Vim
19 条回复
Buges
2020-02-18 17:30:14 +08:00
一直想要一个这样的英文输入法
emonber
2020-02-18 17:49:04 +08:00
可以支持 wsl 环境下的 vim 吗?
Neur2n
2020-02-18 18:12:40 +08:00
@emonber 用的是 ibus 还是 fcitx ?
emonber
2020-02-18 21:33:59 +08:00
@Neur2n WSL 下用的是 Windows 自带输入法哈,不过 vim 调用的 Python 是 WSL 的( Linux ),无法直接使用 win32 api
MrUser
2020-02-18 21:34:20 +08:00
没看懂有什么用,没有这个一样可以输入中文呀?
lazzyboy
2020-02-18 21:42:30 +08:00
想在 windows 7 下使用,不知道是否可以
Neur2n
2020-02-18 22:02:04 +08:00
@lazzyboy 我找时间试一下,也可以去 GitHub 开 issue :)
Neur2n
2020-02-18 22:02:41 +08:00
@emonber 我研究一下
Neur2n
2020-02-18 22:04:01 +08:00
@MrUser 目的是切换 insert/normal 模式的时候自动切换输入法,不用手动切换,其实已有很多同类插件
emonber
2020-02-18 22:08:22 +08:00
@Neur2n 搞定了,参考你的代码,写了一个 C++程序来处理:

```c++

int main(int argc, char** argv)
{
const int US_HKL = 0x0409;
const int ZH_HKL = 0x0804;
HWND hwnd = GetForegroundWindow();

if (argc > 1) {
if ((strcmp(argv[1], "en") == 0) ||
(strcmp(argv[1], "eng") == 0) ||
(strcmp(argv[1], "off") == 0)) {
std::cout << "Switch to English IME\n";
return SendMessage(hwnd, WM_INPUTLANGCHANGEREQUEST, 0, US_HKL);
}
else if ((strcmp(argv[1], "cn") == 0) ||
(strcmp(argv[1], "chn") == 0) ||
(strcmp(argv[1], "on") == 0)) {
std::cout << "Switch to Chinese IME\n";
return SendMessage(hwnd, WM_INPUTLANGCHANGEREQUEST, 0, ZH_HKL);
}
}
std::cout << "Toggle IME\n";
return SendMessage(hwnd, WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD, 0);
}
```
kevinhwang
2020-02-18 23:21:08 +08:00
如果桌面是 Gnome 的话,毛遂自荐 https://github.com/kevinhwang91/vim-ibus-sw
Neur2n
2020-02-19 18:54:09 +08:00
@lazzyboy #6 我在虚拟机试了一下,是可以的,但是:
1. 只用了系统内置的输入法进行测试
2. 如果中文键盘里有两种输入法(比如说拼音和五笔),只能切换到第一个输入法

如果有兴趣使用这个插件,可以帮忙测试下,或去开个 issue 一起讨论下,谢谢。(项目页面: https://github.com/Neur1n/neuims
Neur2n
2020-02-19 18:56:25 +08:00
@emonber #10 我也用 C++实现了,去掉了 Python 依赖。请问你有 GitHub 吗,我在 acknowledgement 里 @一下你。
Neur2n
2020-02-19 18:57:21 +08:00
@kevinhwang #11 谢谢,我学习一下
skywind3000
2020-02-19 20:08:53 +08:00
你这能切换微软拼音的中文 /英文模式么?
Neur2n
2020-02-19 20:50:33 +08:00
@skywind3000 不能。这提醒了我好像 vimim 是可以切换的。但是在 normal 模式下也容易按到 shift 把输入法切换成中文模式,除非有什么方法把 shift 给 block 了。
skywind3000
2020-02-19 21:24:25 +08:00
@Neur2n Windows 本来就可以设置禁用 shift 切中英状态的,我现在默认是微软拼音的英文输入,CTRL+SPACE 中英切换,这样用着舒服点,因为 Win+Space 切换语言我留给了中文 /日语 输入法的切换了,两个维度,效率高些。所以需要变成英文模式。很多人应该和我一样吧,GVim 可以正常切换输中英状态的。
Neur2n
2020-02-19 23:45:52 +08:00
@skywind3000 这是一个很好的免插件解决方案。用插件实现有一个目的是避免更改系统设置,可以方便部署到多台电脑,或避免和电脑的其他用户产生习惯冲突。频繁切换输入法而非切换模式,可能对于一些老机器也不友好,所以目前来说可能只能满足小部分人需求。
emonber
2020-02-20 15:38:38 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/645588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX