如何在切换到vim普通模式时自动更改键盘布局?

时间:2012-06-11 15:58:03

标签: vim keyboard-layout

有时我使用vim编写非美国文本,当我想在普通模式下使用任何命令时,我需要将布局更改为US。有可能自动完成吗?

PS。我可以像this那样进行映射,但在这种情况下命令看起来像:ц而不是:w - 不漂亮且错字风险。

更新

我不想使用keymap选项,因为我更喜欢CapsLock的切换语言。 我尝试为InsertLeave事件编写autocmd,但失败了......

更新2

可能有人知道,为什么以下不起作用?

function SetUsLayout()
  !setxkbmap us,ru
endfunction

autocmd InsertLeave * call SetUsLayout()

4 个答案:

答案 0 :(得分:6)

:help langmap

可能会提供您需要的所有信息。

答案 1 :(得分:3)

看起来,跨平台解决方案不存在......所以,在KDE下我使用以下内容:

function! SetUsLayout()
  silent !qdbus org.kde.keyboard /Layouts setLayout us > /dev/null
endfunction

autocmd InsertLeave * call SetUsLayout()

答案 2 :(得分:0)

对我来说,使用qdbus是最好的选择。我制作了一个简单但易碎的插件,对我来说效果很好:https://github.com/ironhouzi/bikey-vim/tree/master/plugin

我把它称之为脆弱,因为如果有其他人想要使用它,它就没有那么强大。

当我使用Vim时,我主要想要英语,但有一些例外。当我想用我的母语写作时,我点击了'leader'-k,我的航空公司状态栏将显示我已切换语言。当语言不是英语时,脚本将确保每次进入插入模式时,我的母语都是通过qdbus设置的。每次离开插入模式时,语言都会重新设置为英语。它还支持缓冲区之间的个别设置。虽然这可能不是最好的做事方式,但我想我会分享它,以防其他人可能会使用它。

答案 3 :(得分:0)

在Ubuntu中我使用以下内容:

function! SetUsLayout()
  silent !qdbus org.gnome.SettingsDaemon.Keyboard /org/gnome/SettingsDaemon/Keyboard org.gnome.SettingsDaemon.Keyboard.SetInputSource 0 > /dev/null
endfunction

autocmd InsertLeave * call SetUsLayout()

或更短

silent !gsettings set org.gnome.desktop.input-sources current 0