You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Mac系统下如何获取菜单栏输入法状态图标状态以在MacVim状态栏显示?

刚好我之前也被Mac菜单栏隐藏后看不到输入法状态的问题折腾过,给你几个实用的方案来解决这个需求——核心就是先获取系统输入法状态,再把它集成到MacVim的状态栏里:

1. 获取当前输入法状态的两种方法

方法A:用命令行直接读取系统配置

Mac会把当前选中的输入法信息存在系统偏好设置的数据库里,你可以用defaults命令提取:

defaults read com.apple.HIToolbox AppleSelectedInputSources | grep -A 10 -B 2 "KeyboardLayout Name"

执行后会输出类似这样的内容:

"KeyboardLayout Name" = "U.S."

英文模式下是U.S.,中文输入法(比如自带的简体拼音、第三方输入法)会显示对应的名称,比如简体拼音或者搜狗拼音

方法B:用AppleScript更直观地获取名称

AppleScript可以直接和系统交互,返回更简洁的输入法名称,用osascript命令就能执行:

osascript -e 'tell application "System Events" to return name of current input source'

这个命令会直接输出当前输入法的全称,比如U.S.简体拼音,方便我们后续判断模式。

2. 集成到MacVim状态栏

接下来把状态显示到MacVim的状态栏里,编辑你的~/.vimrc配置文件,添加以下内容:

第一步:定义获取输入法状态的函数

function! GetInputMethod()
    " 调用AppleScript获取输入法名称
    let input_name = system('osascript -e "tell application \"System Events\" to return name of current input source"')
    " 去掉多余的换行和空格
    let input_name = trim(input_name)
    
    " 根据名称返回简洁的状态标识,你可以根据自己的输入法调整判断条件
    if input_name ==# "U.S."
        return "[A]"
    else
        return "[中]"
    endif
endfunction

第二步:配置状态栏显示并自动刷新

" 强制显示状态栏
set laststatus=2
" 自定义状态栏格式,把输入法状态加到最右边
set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P\ %{GetInputMethod()}

" 当光标移动或切换插入模式时,自动刷新状态栏确保状态同步
autocmd CursorMoved,CursorMovedI * redrawstatus

保存配置后重启MacVim,你就能在状态栏右侧看到[A][中]的标识了,不管菜单栏是否隐藏,随时都能知道当前输入法模式。

3. 额外优化:绑定CapsLock触发即时刷新

因为你用CapsLock切换输入法,还可以让状态栏在CapsLock按下后立即刷新,避免延迟。如果你的CapsLock在Vim里有映射(比如映射成<C-L>),可以加这条配置:

autocmd User CapsLockPressed call redrawstatus()

如果没有映射,也可以通过系统快捷键设置配合Vim的自动命令,不过上面的基础配置已经能满足日常需求了。

内容的提问来源于stack exchange,提问作者Charles Jie

火山引擎 最新活动