Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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_Windows 7 - Fatal编程技术网

Vim 在插入和正常模式之间更改键盘布局

Vim 在插入和正常模式之间更改键盘布局,vim,windows-7,Vim,Windows 7,在Vim的插入模式下的日常工作中,我使用我熟悉的本地克罗地亚键盘布局(HR)。在正常模式下,使用英语键盘布局(EN)更为实用,因为它有括号[]和曲线括号{},通常Vim的快捷键会更好地利用它 有没有办法在模式之间自动更改键盘模式?Vim可以使用键盘映射文件在插入模式下转换键入的键;它甚至还附带一个克罗地亚版本($VIMRUNTIME/keymap/Croatian.vim):help mbyte keymap很好地解释了这一点: 当键盘无法生成要输入的字符时 文本,您可以使用“键映射”选项。这将

在Vim的插入模式下的日常工作中,我使用我熟悉的本地克罗地亚键盘布局(HR)。在正常模式下,使用英语键盘布局(EN)更为实用,因为它有括号[]和曲线括号{},通常Vim的快捷键会更好地利用它

有没有办法在模式之间自动更改键盘模式?

Vim可以使用键盘映射文件在插入模式下转换键入的键;它甚至还附带一个克罗地亚版本(
$VIMRUNTIME/keymap/Croatian.vim
)<代码>:help mbyte keymap很好地解释了这一点:

当键盘无法生成要输入的字符时 文本,您可以使用“键映射”选项。这将转换一个或多个 (英语)字符转换为另一个(非英语)字符。这只会发生 键入文本时,而不是键入Vim命令时。这样可以避免切换 在两个键盘设置之间

基本上,这种配置应该做到这一点(同时在操作系统中使用英文键盘布局):

任何你这样使用它的人:

在插入和命令行模式下,可以使用CTRL-^在使用 键盘地图与否。 对于带有“iminsert”选项的插入模式,将记住此标志


如果您确实需要更改默认键盘布局,而不是在“插入”模式下,而是在“正常”模式下(可能还有其他模式),则不能使用“键映射”功能。相反,您必须使用外部命令来切换操作系统的输入区域设置(如果在Windows中可以,可以通过)。草图:


你好谢谢你的回答。我不能说我仍然理解keymap的功能。编辑克罗地亚密钥映射文件时,我发现它与编码有关,但就我个人而言,加上您所指的帮助主题,我仍然无法理解它。实际上,我在操作系统中使用HR键盘布局作为默认布局。所以我正在尝试让Vim在正常模式下切换到EN。请,如果你能提供一些进一步的澄清。好的,那样的话,这将很困难。我建议您首先尝试将Vim与EN布局一起使用,并使用提供的克罗地亚键图作为插入模式。如果这已经适合你了,好吧。我担心这对我来说不起作用,因为默认情况下,在我的操作系统中处于EN模式,这会解决我的Vim问题,但会在所有其他应用程序(从Word、Excel到…)中产生问题。你可以设置键来快速切换输入区域设置。此外,我认为Windows甚至可以记住特定应用程序使用的区域设置(例如使用Alt Tab切换时)。恐怕你没有很多其他选择;评论中只提到了侵入性的
:autocmd
/
系统()
解决方案。另外,您是否知道该解决方案只针对vi和vim问题。因为这并不特别涉及编程,所以它可能更适合其他站点。@MichaelT-非常清楚。在这里不讨论vim问题是否是本体论的,因为那个问题已经被打死了好几次,我会慢慢地将vim问题迁移到那里,但在该站点获得更多用户之前,我将把它们留在这里。
:set keymap=croatian
:autocmd InsertLeave * call system('locale-change EN')
:autocmd InsertEnter * call system('locale-change HR')