造轮子: Vim 输入法切换插件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Neur2n
V2EX    Vim

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

  •  1
     
  •   Neur2n 2020-02-18 17:22:34 +08:00 6026 次点击
    这是一个创建于 2132 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 )

    望不吝赐教。

    19 条回复    2020-02-20 15:38:38 +08:00
    Buges
        1
    Buges  
       2020-02-18 17:30:14 +08:00 via Android
    一直想要一个这样的英文输入法
    emonber
        2
    emonber  
       2020-02-18 17:49:04 +08:00 via Android
    可以支持 wsl 环境下的 vim 吗?
    Neur2n
        3
    Neur2n  
    OP
       2020-02-18 18:12:40 +08:00
    @emonber 用的是 ibus 还是 fcitx ?
    emonber
        4
    emonber  
       2020-02-18 21:33:59 +08:00
    @Neur2n WSL 下用的是 Windows 自带输入法哈,不过 vim 调用的 Python 是 WSL 的( Linux ),无法直接使用 win32 api
    MrUser
        5
    MrUser  
       2020-02-18 21:34:20 +08:00
    没看懂有什么用,没有这个一样可以输入中文呀?
    j137tt736CExzlfM
        6
    j137tt736CExzlfM  
       2020-02-18 21:42:30 +08:00
    想在 windows 7 下使用,不知道是否可以
    Neur2n
        7
    Neur2n  
    OP
       2020-02-18 22:02:04 +08:00
    @lazzyboy 我找时间试一下,也可以去 GitHub 开 issue :)
    Neur2n
        8
    Neur2n  
    OP
       2020-02-18 22:02:41 +08:00
    @emonber 我研究一下
    Neur2n
        9
    Neur2n  
    OP
       2020-02-18 22:04:01 +08:00
    @MrUser 目的是切换 insert/normal 模式的时候自动切换输入法,不用手动切换,其实已有很多同类插件
    emonber
        10
    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
        11
    kevinhwang  
       2020-02-18 23:21:08 +08:00
    如果桌面是 Gnome 的话,毛遂自荐 https://github.com/kevinhwang91/vim-ibus-sw
    Neur2n
        12
    Neur2n  
    OP
       2020-02-19 18:54:09 +08:00
    @lazzyboy #6 我在虚拟机试了一下,是可以的,但是:
    1. 只用了系统内置的输入法进行测试
    2. 如果中文键盘里有两种输入法(比如说拼音和五笔),只能切换到第一个输入法

    如果有兴趣使用这个插件,可以帮忙测试下,或去开个 issue 一起讨论下,谢谢。(项目页面: https://github.com/Neur1n/neuims
    Neur2n
        13
    Neur2n  
    OP
       2020-02-19 18:56:25 +08:00
    @emonber #10 我也用 C++实现了,去掉了 Python 依赖。请问你有 GitHub 吗,我在 acknowledgement 里 @一下你。
    Neur2n
        14
    Neur2n  
    OP
       2020-02-19 18:57:21 +08:00
    @kevinhwang #11 谢谢,我学习一下
    skywind3000
        15
    skywind3000  
       2020-02-19 20:08:53 +08:00
    你这能切换微软拼音的中文 /英文模式么?
    Neur2n
        16
    Neur2n  
    OP
       2020-02-19 20:50:33 +08:00
    @skywind3000 不能。这提醒了我好像 vimim 是可以切换的。但是在 normal 模式下也容易按到 shift 把输入法切换成中文模式,除非有什么方法把 shift 给 block 了。
    skywind3000
        17
    skywind3000  
       2020-02-19 21:24:25 +08:00
    @Neur2n Windows 本来就可以设置禁用 shift 切中英状态的,我现在默认是微软拼音的英文输入,CTRL+SPACE 中英切换,这样用着舒服点,因为 Win+Space 切换语言我留给了中文 /日语 输入法的切换了,两个维度,效率高些。所以需要变成英文模式。很多人应该和我一样吧,GVim 可以正常切换输中英状态的。
    Neur2n
        18
    Neur2n  
    OP
       2020-02-19 23:45:52 +08:00
    @skywind3000 这是一个很好的免插件解决方案。用插件实现有一个目的是避免更改系统设置,可以方便部署到多台电脑,或避免和电脑的其他用户产生习惯冲突。频繁切换输入法而非切换模式,可能对于一些老机器也不友好,所以目前来说可能只能满足小部分人需求。
    emonber
        19
    emonber  
       2020-02-20 15:38:38 +08:00 via Android
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2013 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 00:49 PVG 08:49 LAX 16:49 JFK 19:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86