You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04 LTS下Vim输入法切换脚本开发的IBus相关问题咨询

Ubuntu 22.04 LTS下Vim输入法切换脚本开发的IBus相关问题咨询

嗨,我来帮你捋捋这个问题,刚好我之前在Ubuntu 22.04上也折腾过类似的输入源判断需求~

首先解决你最困惑的「为什么有两个GUI工具管理输入法」的问题:GNOME确实默认用IBus作为后端,但系统设置里的键盘输入源配置,是GNOME为了统一桌面体验做的一层封装——它直接对接IBus的xkb模块来添加语言布局,而ibus-setup是IBus官方的原生配置工具,主要给需要添加非xkb类输入法(比如中文拼音、日语假名这类需要额外引擎的输入法)的用户用的。日常用GNOME桌面的话,用系统设置+Gnome-Tweaks就足够,和桌面环境的联动也更好,比如你用CapsLock切换语言的设置就是通过Gnome-Tweaks和GNOME的输入源系统绑定的,完全不用管ibus-setup里的空白配置。

然后是ibus engine总是显示xkb:us::eng的问题:这是因为GNOME添加俄文布局的方式,是直接在IBus的xkb引擎里切换布局,而不是添加一个独立的IBus引擎,所以ibus engine只会返回xkb引擎的基础标识,不会区分具体的布局。这时候别盯着IBus的命令了,改用GNOME原生的gsettings命令来获取输入源状态,这个和你用CapsLock切换的状态是完全同步的,结果更准确。

接下来是你要写的Vim判断脚本的思路:

  • 先用gsettings get org.gnome.desktop.input-sources current获取当前输入源的索引(比如0对应英文,1对应俄文,具体看你添加语言的顺序)
  • 再用gsettings get org.gnome.desktop.input-sources sources可以查看所有已添加的输入源列表,确认索引对应的语言
  • 然后写个简单的bash脚本判断索引,输出1或2就行,比如:
#!/bin/bash
current_idx=$(gsettings get org.gnome.desktop.input-sources current)
# 假设英文是第一个(索引0),俄文是第二个(索引1)
if [ "$current_idx" = "0" ]; then
    echo 1
elif [ "$current_idx" = "1" ]; then
    echo 2
fi

把这个脚本存成input-source-check.sh,给它加执行权限chmod +x input-source-check.sh,然后在Vim里调用它就能拿到你要的结果了。

最后放心,你用Gnome-Tweaks设置的CapsLock切换语言完全不受影响,因为gsettings读取的就是GNOME输入源的实时状态,切换后立刻就能拿到正确的索引。

备注:内容来源于stack exchange,提问作者RobberFokZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 09:19:29