我通常在 Windows 上使用 Vim,并且键映射没有任何问题,但现在我使用运行 Ubuntu 的虚拟机,通过 MobaXterm 访问,事情不太正常。这包括基本的东西,比如<c-s>
保存和<F5>
运行,没有它们我就活不下去。我已经完成了研究并阅读了似乎可以解决这个问题的材料(这里和这里),但它们超出了我的理解范围。坦率地说,必须<c-v>
在功能键之前按下是非常奇怪的。当我尝试时它甚至不起作用。有人可以解释一下吗?作为测试用例,如果我想映射<F2>
到:pwd
,我必须做什么?
令我高兴的是,我发现我的键映射做在 Ubuntu 的 gVim 上按预期工作,所以我将使用它。不过,我仍然想要答案,因为我实际上更喜欢终端上普通旧 vim 的快速和轻松的感觉。
答案1
您将不得不忍受没有它的情况,ctrlS因为这是停止输出的终端命令(ctrlQ撤消该操作)。
其他功能键应该是可映射的,没有任何问题,只需输入:map
,然后点击您想要映射的功能键,其中应该显示例如<F5>
F5,然后是空格,然后是您想要该键映射到的位置。
您可以将该行(不带前导冒号)放入文件中,~/.vimrc
以便为每个 vim 会话启用映射。
如果您已经尝试过,请编辑您的问题以显示您到底尝试了什么以及结果是什么(以及与您的期望有何不同)。
编辑:如果您想映射终端定义中未定义的序列,则可以手动映射序列。
首先,您需要找出当您按 例如 时它发送了哪些字节/字符ctrlshiftF2。我总是用od -c
这个;启动命令,按按键序列,点击ctrld将文件结尾发送到命令,然后打印解码的版本:
$ od -c
^[[24^
0000000 033 [ 2 4 ^ \n
0000006
所以这是转义符,[, 2, 4, ^(换行符是我在序列之后输入的内容,应该被忽略;你也可以点击ctrld两次,但输出是在输入之后开始的,看起来很混乱)。
现在我们知道了序列,并且可以将映射添加到.vimrc
.添加如下行:
map <C-[>[24^ :whateveryouwant
该<C-[>
序列是转义的 vim 表示,与 相同ctrl[。之后,这些字符就不再特殊,因此可以按原样输入。
现在ctrlshiftF2将映射到您启动 vim 时输入的右侧。