在iTerm2/Terminal上的vim中的"M-"绑定不起作用

Dan*_*Dan 17 vim iterm osx-lion

我注意到iTerm2提供了非常方便的功能,使用"Option key as + ESC"(或者作为meta,但显然已经过时了).

我尝试了它们两个,选项键在Bash(set -o emacs模式)和Emacs中按预期工作,但在Vim中没有.因此,我不能使用任何"M-"绑定.我发现的是:

  • 如果我将选项设置为"+ ESC",vim只能理解ESC +键,并且不知道我实际上是指Meta键.
  • 如果我将选项设置为"meta",则使用"option"修改的键的行为与没有修饰符的行为一样(不知道如何正式测试vim从我正在键入的键组合中理解的内容).

"M-"映射在MacVim(7.3.53)中完美运行,但这不是在控制台之外,而是在这个问题的范围内.

我对如何使这些映射在Vim,iTerm2或Terminal下运行感兴趣.

我的规格:

  • MAC OS X Lion 10.7.2
  • iTerm2 1.0.0.20111020
  • vim @ 7.3.107_0 + python26 [虽然是MacPorts]

rom*_*inl 9

我已经下载了最新的iTerm2,并试图通过i<C-v><M-a>以下设置查看它发送给Vim(/ )的内容:

  • 选项作为选项:

    Vim打印æ在我的法语键盘上是正常的和预期的

  • 选项为Meta:

    Vim待在那里,等待事情发生.什么都没打印.如果我按下Option并a依次按顺序获取a.按下选项并a以某种随机顺序打印á,这很奇怪,完全出乎意料.

  • 选项为+ ESC:

    Vim打印^[a意味着"逃脱角色后跟角色a".

从这些测试看来,<M->如果没有一些假想的黑魔法,Vim将永远不会收到.

如果您坚持使用"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
Run Code Online (Sandbox Code Playgroud)

  • 另外我想映射类似`<Mj>`和`<Mk>`的东西,以便在Eclipse中执行'Alt +(向上|向下)`操作(即移动线/线超过上/下线).如果我要映射`Esc +(j | k)`,那么当我退出插入模式并真正按下其中一个移动键时会很痛苦... (2认同)
  • 我不确定,看到`:help map-alt-keys`:看起来Vim可能在前面有点受限. (2认同)

小智 5

我留下我的选项键作为 Normal 并发现 Vim 将它们视为<T-绑定。因此,例如,我在我的 .vimrc 中有这个映射设置,以便在插入模式下移动到单词的末尾:

noremap! <T-Right> <C-o><Right>;
Run Code Online (Sandbox Code Playgroud)