15

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

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

更新

我不想使用键盘映射选项,因为我更喜欢通过 CapsLock 切换语言。我尝试为 InsertLeave 事件编写 autocmd,但失败了……

更新 2

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

function SetUsLayout()
  !setxkbmap us,ru
endfunction

autocmd InsertLeave * call SetUsLayout()
4

4 回答 4

5
:help langmap

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

于 2012-06-11T16:17:27.043 回答
4

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

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

autocmd InsertLeave * call SetUsLayout()
于 2012-06-12T09:47:45.300 回答
1

对我来说,使用 qdbus 是最好的选择。我制作了一个简单但很脆弱的插件,非常适合我:https ://github.com/ironhouzi/bikey-vim/tree/master/plugin

我称它为易碎的,因为如果其他人想使用它,它对它没有太大的鲁棒性。

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

于 2014-09-13T11:01:45.463 回答
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  
于 2016-03-19T21:40:30.107 回答