iTerm2/Terminal 上 vim 中的“M-”绑定不起作用

问题描述 投票:0回答:3

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

我尝试了它们,选项键在 Bash(

set -o emacs
模式)和 Emacs 中按预期工作,但在 Vim 中却不行。因此,我无法使用任何“M-”绑定。 我发现的是:

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

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

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

我的规格

  • MAC OS X Lion 10.7.2
  • iTerm2 1.0.0.20111020
  • vim @7.3.107_0+python26 [尽管 MacPorts]
vim osx-lion iterm
3个回答
10
投票

我已经下载了最新的 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

5
投票

我将选项键设置为普通,发现 Vim 将它们视为

<T-
绑定。因此,例如,我在 .vimrc 中有此映射设置,以便在插入模式下移动到单词的末尾:

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

0
投票

以下是

iterm2
(版本:
3.4.23
)中对我来说的关键设置:

  1. 左/右选项键 ->
    Esc+
  2. 检查
    xterm control sequence can enable modifyOtherKeys mode

© www.soinside.com 2019 - 2024. All rights reserved.