Vim: 在普通模式下切换键盘布局
Vim: Switch Keyboard Layout in Normal Mode
我试图在 vim 中离开插入模式时自动将我的键盘布局从 de 切换到 us。 langmap
不是一个选项,因为我在整个系统范围内起诉我们和 es 键盘布局。
任何人都可以解释为什么使用
function! SetUsLayout()
silent !setxkbmap us,de
endfunction
autocmd InsertLeave * call SetUsLayout()
离开插入模式时不从 de 切换到 us,也不从 us 切换到 de?
我已经阅读:How to automatically change keyboard layout on switch to vim normal-mode?
但是找不到答案。
先完全改成我们再改成混合布局并不能解决问题:
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 布局切换到我们的布局。然而,这不是一个选项,因为这样就不可能再切换回 es。
如需完整答案和备选方案,您可以在 vi/vim stackexchange here.
上查看此线程
我不确定我是否正确理解了你的问题,因为你提到了 [de] 和 [es] 布局插入字符。
如果您需要,这是一个解决方案:
- [de] 插入字符布局
- [us] 正常模式操作的布局
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()
根据您的喜好安排 VimLeave 函数,我还添加了 Cmdline Enter/Leave 事件,以便在 nvim 命令行中键入我的母语。
另请注意:
对于宏、插件等...此解决方案使您能够使用本机 [us] 布局,从而避免一些麻烦和重新映射。这是此解决方案相对于 langmap 的主要优势。
在我的 neovim 上,替换模式不会触发事件“InsertModeEnter”,所以如果你的配置也是这样,你必须在那里使用 us 布局。
在正常模式下,按字符查找(即f/F/t/T)需要使用[us]布局,这可能是一个烦恼。在这种情况下,您可以添加映射,例如:
nnoremap fy fz
nnoremap Fy Fz
nnoremap ty tz
nnoremap Ty TZ
然而,它可能不适用于所有字母,奇怪的是,在我的配置中,它需要按两次键盘映射才能将其考虑在内(就好像它必须将规则加载到内存中一样)。完成后,它的运行速度与原生一样快。
我试图在 vim 中离开插入模式时自动将我的键盘布局从 de 切换到 us。 langmap
不是一个选项,因为我在整个系统范围内起诉我们和 es 键盘布局。
任何人都可以解释为什么使用
function! SetUsLayout()
silent !setxkbmap us,de
endfunction
autocmd InsertLeave * call SetUsLayout()
离开插入模式时不从 de 切换到 us,也不从 us 切换到 de? 我已经阅读:How to automatically change keyboard layout on switch to vim normal-mode? 但是找不到答案。
先完全改成我们再改成混合布局并不能解决问题:
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 布局切换到我们的布局。然而,这不是一个选项,因为这样就不可能再切换回 es。
如需完整答案和备选方案,您可以在 vi/vim stackexchange here.
上查看此线程我不确定我是否正确理解了你的问题,因为你提到了 [de] 和 [es] 布局插入字符。
如果您需要,这是一个解决方案:
- [de] 插入字符布局
- [us] 正常模式操作的布局
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()
根据您的喜好安排 VimLeave 函数,我还添加了 Cmdline Enter/Leave 事件,以便在 nvim 命令行中键入我的母语。
另请注意:
对于宏、插件等...此解决方案使您能够使用本机 [us] 布局,从而避免一些麻烦和重新映射。这是此解决方案相对于 langmap 的主要优势。
在我的 neovim 上,替换模式不会触发事件“InsertModeEnter”,所以如果你的配置也是这样,你必须在那里使用 us 布局。
在正常模式下,按字符查找(即f/F/t/T)需要使用[us]布局,这可能是一个烦恼。在这种情况下,您可以添加映射,例如:
nnoremap fy fz
nnoremap Fy Fz
nnoremap ty tz
nnoremap Ty TZ
然而,它可能不适用于所有字母,奇怪的是,在我的配置中,它需要按两次键盘映射才能将其考虑在内(就好像它必须将规则加载到内存中一样)。完成后,它的运行速度与原生一样快。