繁体   English   中英

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

[英]How to automatically change keyboard layout on switch to vim normal-mode?

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

PS。 我可以这样做映射这样 ,但在这种情况下,命令如下:ц代替:W -不漂亮,错字风险。

更新

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

更新2

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

function SetUsLayout()
  !setxkbmap us,ru
endfunction

autocmd InsertLeave * call SetUsLayout()
:help langmap

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

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

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

autocmd InsertLeave * call SetUsLayout()

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

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

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

在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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM