我注意到 iTerm2 提供了使用“Option key as +ESC”(或作为元,但显然已经过时)的非常方便的功能。
我尝试了它们,选项键在 Bash(
set -o emacs
模式)和 Emacs 中按预期工作,但在 Vim 中却不行。因此,我无法使用任何“M-”绑定。
我发现的是:
“M-”映射在 MacVim (7.3.53) 中完美工作,但那是在控制台之外,不在这个问题的范围内。
我对如何在 iTerm2 或 Terminal 下的 Vim 中使这些映射工作感兴趣。
我的规格:
我已经下载了最新的 iTerm2 并尝试查看它发送到的内容/Vim (
i<C-v><M-a>
) 打印的内容,设置如下:
选项作为选项:
Vim 打印
æ
,这是正常的,并且在我的法语键盘上是预期的选项作为元:
Vim 呆在那里,等待事情发生。没有打印任何内容。如果我依次按 Option 和
a
,我只会获得 a
。以某种随机顺序按 Option 和 a
可能会打印 á
,这很奇怪且完全出乎意料。选项为+ESC:
Vim 打印
^[a
,意思是“转义字符后跟字符 a”。从这些测试来看,如果没有一些假设的黑魔法,Vim 永远不会收到
<M->
。
如果您坚持使用 “Option as +ESC”,则似乎您必须将所有自定义
<M-something>
映射更改为 <Esc>something
。这可能有效,但它会让用任何非英语语言写任何类型的散文变得痛苦。
我所做的:我保留 Option 键不变,这样我就可以轻松键入
œ…«»
等字符,并使用 <Leader>
(映射到 ,
,请参阅 :help mapleader
)进行所有自定义映射。
这里有些人喜欢将其保留给插件,并提倡一种更简单且可能更安全的方法。
inoremap <leader>, <C-x><C-o> "my way (copied elsewhere)
inoremap ,, <C-x><C-o> "another way
我将选项键设置为普通,发现 Vim 将它们视为
<T-
绑定。因此,例如,我在 .vimrc 中有此映射设置,以便在插入模式下移动到单词的末尾:
noremap! <T-Right> <C-o><Right>;