Unix Vim:在正常模式下切换键盘布局

Unix Vim:在正常模式下切换键盘布局,unix,vim,keyboard,Unix,Vim,Keyboard,在vim中退出插入模式时,我试图自动将键盘布局从de切换到uslangmap不是一个选项,因为我在整个系统范围内使用us和es键盘布局 有人能解释一下为什么使用 function! SetUsLayout() silent !setxkbmap us,de endfunction autocmd InsertLeave * call SetUsLayout() 离开插入模式时,不从de切换到us,也不从us切换到de? 我已经读过: 但是找不到答案 首先完全改为我们,然后改为混合布局并

在vim中退出插入模式时,我试图自动将键盘布局从de切换到us
langmap
不是一个选项,因为我在整个系统范围内使用us和es键盘布局

有人能解释一下为什么使用

function! SetUsLayout()
    silent !setxkbmap us,de
endfunction
autocmd InsertLeave * call SetUsLayout()
离开插入模式时,不从de切换到us,也不从us切换到de? 我已经读过: 但是找不到答案

首先完全改为我们,然后改为混合布局并不能解决问题:

function! SetUsLayout()
    silent !setxkbmap us
    silent !setxkbmap us,de
endfunction
autocmd InsertLeave * call SetUsLayout()
也不行。在这两种情况下,将继续使用在插入模式下激活的布局。 功能

function! SetUsLayout()
    silent !setxkbmap us
endfunction
autocmd InsertLeave * call SetUsLayout()

不过,它的效果非常好。从初始de布局切换到us布局。但是,这不是一个选项,因为无法再切换回es。

有关完整答案和备选方案,您可以在vi/vim stackexchange上查看此线程

我不确定我是否正确理解了您的问题,因为您提到了插入字符的[de]和[es]布局

这是一个解决方案,以备您需要:

  • [de]用于插入字符的布局
  • [us]正常模式操作布局
根据您的喜好排列VimLeave函数,我还添加了Cmdline Enter/Leave事件,以便在nvim命令行中键入我的母语

还请注意:

  • 对于宏、插件等,此解决方案使您能够使用本机[us]布局,从而避免一些麻烦和重新映射。这是该解决方案相对于langmap的主要优势

  • 在我的neovim上,replace mode不会触发事件“InsertModeEnter”,因此如果配置中也是这样,则必须使用us布局

  • 在正常模式下,按字符查找(即f/f/t/t)需要使用[us]布局,这可能会造成麻烦。在这种情况下,您可以添加映射,例如:


但是,它可能不适用于所有字母,奇怪的是,在我的配置中,它需要按两次键映射才能将其考虑在内(好像它必须将规则加载到内存中)。完成后,它的运行速度与本机一样快。

有关完整答案和备选方案,您可以在vi/vim stackexchange上查看此线程

我不确定我是否正确理解了您的问题,因为您提到了插入字符的[de]和[es]布局

这是一个解决方案,以备您需要:

  • [de]用于插入字符的布局
  • [us]正常模式操作布局
根据您的喜好排列VimLeave函数,我还添加了Cmdline Enter/Leave事件,以便在nvim命令行中键入我的母语

还请注意:

  • 对于宏、插件等,此解决方案使您能够使用本机[us]布局,从而避免一些麻烦和重新映射。这是该解决方案相对于langmap的主要优势

  • 在我的neovim上,replace mode不会触发事件“InsertModeEnter”,因此如果配置中也是这样,则必须使用us布局

  • 在正常模式下,按字符查找(即f/f/t/t)需要使用[us]布局,这可能会造成麻烦。在这种情况下,您可以添加映射,例如:


但是,它可能不适用于所有字母,奇怪的是,在我的配置中,它需要按两次键映射才能将其考虑在内(好像它必须将规则加载到内存中)。一旦完成,它的工作速度就像它是本机的一样快。

为了澄清,您是否正在尝试设置系统范围的键盘布局?为什么不直接使用
:h'keymap'
?我发现直接键入字符(如u)会更舒服,而不需要像hack那样的技巧“美国。但是对于普通模式,我更喜欢我们的绑定。如果有一个命令可以简单地在不同的布局之间切换,我很乐意使用它。澄清一下,您是否正在尝试设置系统范围的键盘布局?为什么不直接使用
:h'keymap'
?我发现直接键入字符(如u)会更舒服,而不需要像hack那样的技巧“美国。但是对于普通模式,我更喜欢我们的绑定。如果有一个命令可以简单地在不同的布局之间切换,我很乐意使用它。非常感谢您,我在这段时间内使用了xkb开关。但我想我更喜欢您的本机解决方案,因为它不附带任何外部依赖项。非常感谢您,同时我也使用了xkb开关。但我想我更喜欢您的本机解决方案,因为它没有任何外部依赖关系。
function! SetUsLayout()
    silent !setxkbmap us
endfunction

function! SetDeLayout()
    silent !setxkbmap de
endfunction

function! SetUsDeLayout()
    silent !setxkbmap us,de
endfunction

autocmd VimEnter * call SetUsLayout()
autocmd InsertLeave,CmdlineLeave * call SetUsLayout()
autocmd InsertEnter,CmdlineEnter * call SetDeLayout()
autocmd VimLeave * call SetUsDeLayout()
nnoremap fy fz
nnoremap Fy Fz
nnoremap ty tz
nnoremap Ty TZ