Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在切换到vim正常模式时自动更改键盘布局?_Vim_Keyboard Layout - Fatal编程技术网

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

如何在切换到vim正常模式时自动更改键盘布局?,vim,keyboard-layout,Vim,Keyboard Layout,有时我使用vim来编写非US文本,当我想在正常模式下使用任何命令时,我需要将布局更改为US。有可能自动完成吗 另外,我可以像这样做映射,但在本例中,命令看起来像:ц而不是:w-不漂亮和打字风险 更新 我不想使用keymap选项,因为我更喜欢CapsLock的switch语言。 我尝试为InsertLeave事件编写autocmd,但失败 更新2 也许有人知道,为什么下面的方法不起作用 function SetUsLayout() !setxkbmap us,ru endfunction a

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

另外,我可以像这样做映射,但在本例中,命令看起来像:ц而不是:w-不漂亮和打字风险

更新

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

更新2

也许有人知道,为什么下面的方法不起作用

function SetUsLayout()
  !setxkbmap us,ru
endfunction

autocmd InsertLeave * call SetUsLayout()

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

看起来,跨平台解决方案并不存在。。。因此,在KDE下,我使用以下内容:

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

autocmd InsertLeave * call SetUsLayout()

对我来说,使用qdbus是最好的选择。我制作了一个简单但脆弱的插件,非常适合我:

我称之为脆弱,因为如果其他人想使用它,它就没有太多的健壮性


当我使用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  

“在命令行模式下输入的字符将不受此选项的影响。”因此hjkl工作正常,但命令不受影响。这将处理您要求的:正常模式命令。有关命令模式,请参见
:help keymap
。好的,我可以设置keymap=russian jcukenwin,但要切换到我们,我需要使用ctrl+^(或映射任何其他),但不是非常方便的CapsLock。我不是真的可以测试它(法语布局),但您可以尝试类似
:nnoremap:
。卡普斯洛克怎么了?现在我尝试使用依赖操作系统的解决方案:setxkbmap在InsertLeave事件上自动切换布局这里的答案是相关的:查看类似的问题“”,而不是前面评论中链接的问题,因为它有效地涵盖了同一问题,而且更彻底。我已经在更新中写过,不想使用keymap选项,因为无法在vim中映射CapsLock。
silent !gsettings set org.gnome.desktop.input-sources current 0