基于 SSH 转发和 Socket 通信的 VIM 输入法切换插件。
切换输入法您需要安装第三方工具,我这里推荐使用 im-select,当我执行如下命令即可切换至 ABC 输入法:
im-select com.apple.keylayout.ABC
所以,逻辑非常简单,就是让远程服务器调用本机用于切换输入法的命令即可。
- packer
use { 'mkdir700/im-select-remote' }
- lazyvim
{
"mkdir700/im-select-remote",
config = function()
require('im-select-remote').setup()
end
}
默认配置如下:
M.config = {
osc = {
secret = "",
},
socket = {
port = 23333,
max_retry_count = 3,
command = "im-select com.apple.keylayout.ABC",
},
}
配置文件路径:~/.ssh/config
- 本机
Host <your server name>
HostName <your hostname>
User <username>
Port 22
RemoteForward 127.0.0.1:23333 127.0.0.1:23333 -- 用于端口转发
ServerAliveInterval 240
Host *
ForwardAgent yes
注意:
RemoteForward
用于端口转发,ServerAliveInterval
用于保持连接。RemoteForward
的第一个参数是远程服务器的地址,第二个参数是本地机器的地址。
- 远程服务器
Host local
HostName localhost
Port 23333
User <username>
IM-Select-Remote 可以连接 Socket 服务以通知本地机器切换输入法,所以本地机器需要开启一个 Socket 服务。
git clone https://github.com/mkdir700/im-select-remote.git
chmod +x ./im-select-remote/server/im_server.sh
./im-select-remote/server/im-server.sh
Mac OS:
launchctl load ./launch/localhost.im-server.plist
launchctl start localhost.im-select.plist
launchctl status localhost.im-select.plist
Linux:
TODO
Windows:
TODO
注意:
打开 NVIM 后,IM-Select-Remote 会去判断是否已配置 SSH,这将作为是否自动连接的前提条件。如果检查通过将连接 Socket 服务,否则最多重试三次后就放弃连接。
此外,您也可以执行 IMSelectSocketEnable
进行手动连接。
TODO
自动切换输入法的触发时机:
- 进入缓冲区时
- 从输入模式回到正常模式时