2011-11-22 56 views
15

我注意到iTerm2提供了使用“Option key as + ESC”(或作为元,但显然已过时)的非常方便的功能。在iTerm2 /终端vim中的“M-”绑定不起作用

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

  • 如果我设置选项“+ ESC”,VIM只是了解ESC +键,不知道我其实是元关键。
  • 如果我将选项设置为“meta”,用“option”修改的键的行为就像没有修饰符一样(不知道如何正式测试vim从我正在键入的键组合中知道什么)。

“M-”映射在MacVim(7.3.53)中完美工作,但这不在控制台之外,也不在此问题的范围之内。

我感兴趣的是如何使这些映射在iTemm2或Terminal下的Vim中工作。

我的规格

  • MAC OS X狮子10.7.2
  • iTerm2 1.0.0.20111020
  • VIM @ 7.3.107_0 + python26 [虽然MacPorts的]
+2

有时人们使用术语“元”有一个非常狭隘的解释是指“一个高位设置的ASCII字符“;然而,更一般地说,“元”可以意味着使用高位或用ESC前缀。我从措辞中认为“Option as Meta”的意思是“设置高位”,这与使用UTF-8(或其他8位)编码不兼容。现代终端仿真器通常默认为UTF-8,并且需要使用ESC前缀作为“Meta”。 Mac OS X Terminal的“选项作为元键”选项仅意味着“带ESC前缀”。 –

+1

http://stackoverflow.com/a/15399297/2355112有关于在Mac中映射“Option + char”的解决方案。 – oozzal

回答

8

我已经下载了最新的iTerm2并尝试查看它发送给Vim(i<C-v><M-a>)的内容以及如何设置:

  • 选项,选项:

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

  • 选项作为元上:

    的Vim在那里停留,等待着什么即将发生。没有打印。如果我依次按Option和a,我只能获得a。按Option和a以某种随机顺序可能会打印á,这很奇怪,完全出乎意料。

  • 选项为+ ESC:

    Vim的打印^[a这意味着 “转义字符后的字符是”。

从它出现Vim会永远得到<M->没有一些假设性的黑魔法这些测试。

如果你坚持“选项,+ 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 
+1

准确地说。 Vim从来没有得到任何''组合。问题是我有几个插件使用'M-'绑定,并且插入这些插件很不方便。也许有一个vim补丁来欺骗它将一个非常快速的Esc +键转换为''? – Dan

+2

另外我想绘制一些像''和''这样的东西来完成Eclipse中的Alt +(up | down)操作(即将行/行移过上面/下面的行)。如果我要映射'Esc +(j | k)',那么退出插入模式并真正按下其中一个移动键时会很痛苦...... – Dan

+0

您能否列出需要''的插件? – romainl

4

我离开了我的选择键来充当正常和发现的Vim看到他们为<T-绑定。因此,举例来说,我有这样的映射设置在我的.vimrc移动到插入模式时一个单词的结尾:

noremap! <T-Right> <C-o><Right>;