有时我使用vim编写非美国文本,当我想在普通模式下使用任何命令时,我需要将布局更改为US。有可能自动完成吗?
PS。我可以像this那样进行映射,但在这种情况下命令看起来像:ц而不是:w - 不漂亮且错字风险。
更新
我不想使用keymap选项,因为我更喜欢CapsLock的切换语言。 我尝试为InsertLeave事件编写autocmd,但失败了......
更新2
可能有人知道,为什么以下不起作用?
function SetUsLayout()
!setxkbmap us,ru
endfunction
autocmd InsertLeave * call SetUsLayout()
答案 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