Skip to main content
  1. Posts/

如何让 Neovim 中文输入时自动切换输入法

··1255 words·3 mins·
Nvim IME
Table of Contents
更新日志
  • 2023-06-18:增加 macism 以及 im-select.nvim 使用。
  • 2022-11-07:针对 macbook M1 CPU 设置添加说明,添加 smartim 插件使用。

Vim/Neovim 下输入中文最大的痛,就是在 Normal 模式下,需要频繁从中文模式切换到英文模式,来输入 Vim 的各种命令。本文总结几款插件,可以帮助我们在 macOS、Windows 下,进入 Normal 模式的时候自动切换到英文输入。

macOS
#

vim-barbaric
#

vim-barbaric 是一款帮助用户自动设置输入法模式的插件。

安装依赖
#

在 macOS 下,需要额外安装 xkbswitch-macosx

curl -o /usr/local/bin/xkbswitch https://raw.githubusercontent.com/myshov/xkbswitch-macosx/master/bin/xkbswitch

在 macOS M1 芯片下,以上预编译的 binary 文件无法适用(仅针对 intel cpu),可以使用 这里 提供的 fork,自行编译,然后放到 /usr/local/bin 目录。

插件安装使用
#

然后使用插件管理器安装该插件即可:

Plug 'rlue/vim-barbaric'

该插件开箱即用,无需额外设置。

vim-xkbswitch
#

另外一款插件是 vim-xkbswitch

安装依赖
#

这个插件也需要安装 xkbswitch-macosx,参考上面的安装步骤。另外该插件依赖 libxkbswitch-macosx,需要安装该库:

curl -o /usr/local/lib/libxkbswitch.dylib https://github.com/myshov/libxkbswitch-macosx/raw/master/bin/libxkbswitch.dylib

如果使用的 M1 芯片的 mac,则需要自己编译,参考 这个 issue,使用如下命令编译:

gcc -dynamiclib libxkbswitch.c -o bin/libxkbswitch.dylib

把生成的动态库放到 /usr/local/lib 下面:

cp bin/libxkbswitch.dylib /usr/local/lib

插件安装使用
#

首先安装该插件:

Plug 'lyokha/vim-xkbswitch'

最后,在 Neovim 配置中加入下面的设置即可:

let g:XkbSwitchEnabled = 1

vim-macos-ime
#

依赖安装
#

首先安装这款插件的依赖 macism:

brew tap laishulu/macism
brew install macism

直接在命令行输入 macism 命令,可以插件当前正在使用的输入法的名称,这会在插件的设置中用到。

插件安装使用
#

使用 Packer.nvim 的安装 vim-macos-ime 方法如下:

use { "laishulu/vim-macos-ime", config = function()
    vim.g.macosime_normal_ime = 'com.apple.keylayout.ABC'
    vim.g.macosime_cjk_ime = 'com.apple.inputmethod.SCIM.ITABC'
end}

变量 macosime_normal_ime 用来设置 normal 模式下的英文输入法,变量 macosime_cjk_ime 用来设置中文输入法,这两个变量一定要根据实际情况设置正确,否则插件无法工作。

有了以上的设置,安装插件以后,进入 insert 模式,插件会根据前一个字符是否是中文判断切换到中文还是英文输入法,虽然还不算非常智能(无法记录推出 insert 之前用的什么输入法),总体还可用。

im-select.nvim
#

依赖安装
#

curl -LO https://github.com/daipeihust/im-select/raw/8080ad18f20218d1b6b5ef81d26cc5452d56b165/im-select-mac/out/apple/im-select
chmod u+x im-select
mv im-select /usr/local/bin

第一次使用需要在系统设置 “Privacy & Security” 给这个可执行程序权限,否则无法运行。

插件安装使用
#

使用 Packer 安装 im-select.nvim 方法如下:

use { 'keaising/im-select.nvim', config = function()
    require('im_select').setup {
        default_im_select  = "com.apple.keylayout.ABC"
    }
end}

default_im_select 参数设定 normal 模式下输入法,需要根据自己的情况设置。这款插件工作良好,可以记录上次离开 insert 之前使用的输入法,比 vim-macos-ime 智能一点。

smartim
#

使用 packer.nvim 安装 smartim 如下:

use { "ybian/smartim", event = { "InsertEnter" }, config = function ()
        -- default IME mode
        vim.g.smartim_default = "com.apple.keylayout.ABC"
    end}

Note that we should set variable smartim_default based on our case. We can run the im-select executable without argument to get current mode:

./plugin/im-select

这款插件和 im-select.nvim 其实差不多,也是以来 im-select ,只不过这个插件把 im-select 可执行文件集成到插件本身,不需要用户单独安装了。。。并且插件只支持了 macOS。

Windows
#

以上的 im-select.nvim, vim-xkbswitch 也可以在 Windows 工作,有需要可以参考具体文档来配置。

neuims
#

Windows 下可以安装 neuims:

if g:is_mac
  Plug 'lyokha/vim-xkbswitch'
elseif g:is_win
  Plug 'Neur1n/neuims'
endif

然后使用命令 IMSToggle 打开这个插件的功能。打开功能以后,使用 ESC 离开插入模式,输入法会自动切换到 US keyboard 模式,重新按 i 进入插入模式,会切换到之前的输入法 (注意是切换到了输入法的默认状态,如果输入法默认状态是英文输入,在中文输入状态,按 ESC 离开插入模式,再进入插入模式,输入法处于英文输入状态,目前似乎还不支持切换到输入法上次使用的状态,不过这已经比较好了)。

Related

Vim 实现的输入法体验
··1012 words·3 mins
Nvim Vim IME
I read the nvim v0.8 release note so you do not have to
·877 words·5 mins
Nvim LSP
Set up for C++/C Development in Neovim
··489 words·3 mins
Nvim C++ C Clang