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

xesrikrc  于 2023-10-20  发布在  其他
关注(0)|答案(5)|浏览(141)

有时我使用Vim来写非美国文本,当我想在正常模式下使用任何命令时,我需要将布局更改为美国。有可能自动完成吗?
PS.我可以像this一样进行Map,但在这种情况下,命令看起来像:w-not pretty and typo-risk。

更新

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

更新2

也许有人知道,为什么下面的不工作?

function SetUsLayout()
  !setxkbmap us,ru
endfunction

autocmd InsertLeave * call SetUsLayout()
9o685dep

9o685dep1#

:help langmap

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

sqserrrh

sqserrrh2#

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

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

autocmd InsertLeave * call SetUsLayout()
t5fffqht

t5fffqht3#

对我来说,使用qdbus是最好的选择。我做了一个简单但脆弱的插件,对我来说效果很好:https://github.com/ironhouzi/bikey-vim/tree/master/plugin
我称之为脆弱的,因为如果其他人想使用它,它没有太多的鲁棒性。
我在使用Vim的时候主要是想使用英语,只有少数例外。当我想用我的母语写的时候,我点击“leader”-k,我的航空公司状态栏就会显示我已经切换了语言。当语言不是英语时,脚本将确保每次我进入插入模式时,都通过qdbus设置我的母语。每次我离开插入模式时,语言都被设置回英语。它还支持缓冲区之间的单独设置。即使这可能不是最好的做事方式,我想我会分享它,以防别人可能会从中得到一些用处。

oewdyzsn

oewdyzsn4#

Arch中,可以对nvim\vim执行以下操作:

yay -S xkb-switch
SetUsLayout = function()
  vim.api.nvim_command('silent !xkb-switch -s us')
end

vim.api.nvim_command('autocmd InsertLeave * call SetUsLayout()')
z0qdvdin

z0qdvdin5#

在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

相关问题