首页 > 解决方案 > Ctrl+6 不是 Vim 中的编辑器命令(在 .vimrc 中切换语言)

问题描述

我希望 VIM 默认以两个键映射(希腊语和拉丁语)开头,但默认为拉丁语进行编码。我已经设法在 .vimrc 中添加了希腊语:set keymap=greek,但是这使得希腊语成为默认语言。在 VIM 中,我可以使用 Ctrl+6 在插入模式下更改为拉丁语,但我希望在启动 vim 时自动发生这种情况,因此拉丁语将是默认的键盘映射。问题是 Ctrl+6(或 Ctrl+^)不是编辑器命令,而是键绑定,因此我无法将它放在 .vimrc 中。关于如何解决这个问题的任何想法?

tl; dr 我希望希腊语键盘映射在 vim 中自动加载,但不是默认键盘映射。

标签: vim

解决方案


这不完全是您要求的解决方案,而是一个适合我的解决方案。

我有两个imap命令可以在.vimrc法语和英语键盘之间切换:

imap ^f <ESC>:set keymap=canfr<CR>a
imap ^^ <ESC>:set keymap=<CR>a

在插入模式下,如果我输入 ^f 它会切换到法语,如果我输入 ^^ 它会切换回默认值。

您也可以在命令模式下添加相同的内容:

map ^f :set keymap=canfr<CR>
map ^^ :set keymap=<CR>

在您的情况下,您必须用激活各自键盘所需的内容替换我的:set keymap命令,并且可能还用您喜欢的字符替换我的^f和, (不知道如何编码,我把它留给你)和第二个字符您可以选择选择哪个键盘。^^Ctrl-6

PS:要创建ctrl-6规则,我会在键盘上按 Ctrl-V,然后按 Ctrl-6。在我使用的太多机器之一上,结果如下所示,我在其中添加e了英语和f法语,但在您的机器上很可能会有所不同:

map <ESC>[54;5ue :set keymap=<CR>
map <ESC>[54;5uf :set keymap=canfr<CR>
imap <ESC>[54;5ue <ESC>:set keymap=<CR>a
imap <ESC>[54;5uf <ESC>:set keymap=canfr<CR>a

我还用 替换了该技术产生的文字转义字符,它在视觉上看起来很喜欢^[,但实际上只是一个字符,<ESC>因此可以剪切和粘贴。

PPS:当您按下 Ctrl-V Ctrl-6 时,Ctrl-6 的外观与系统高度相关。我上面显示的是来自 Windows 机器的 cygwin-mintty 终端中的 ubuntu 会话。在 gvim for Windows 中,它是单个字符,显示为^^,在 Git Bash 中的 vi 中,它是单个字符,显示为^?. 由于我不完全理解的原因,Ctrl- N的编码变化很大。

PPPS:要让所有这些都为您工作,您可能必须删除现有的 Ctrl-6 键绑定。


推荐阅读