如何在.vimrc中映射ALT键?


9

为了能够添加空白行没有进入插入模式,我试图映射ALT-oALT-Oo<ESC>o<ESC>

我已经尝试了以下内容 .vimrc

map <M-o> o<ESC>
map <M-O> O<ESC>

map <ALT-o> o<ESC>
map <ALT-O> O<ESC>

和(如下所示)

map <A-o> o<ESC>
map <A-O> O<ESC>

但没有任何作用。它只是给出通常的行为,好像ALT-o尚未定义。

这是我第一次更改.vimrc文件,并且找不到文档告诉您如何指定各种键的位置。但是我可以通过以下方式验证我的.vimrc文件正在被读取:

map <Enter> ihello<ESC>

成功映射<Enter>到插入hello并返回到命令模式。

我在Cygwin中使用vim。


听起来您的终端根本没有通过alt序列。还有其他已知序列吗?尝试Ctrl怎么办?您正在使用哪个终端?
Caleb

我在cygwin上使用vim,但作为其他编辑细节,我使其他脚本正常工作。
埃里克·威尔逊

Ctrl可以正常工作。似乎没有让我区分<C-o><C-O>
埃里克·威尔逊

吉尔斯的答案是正确的。您应该最终切换到功能更强大的终端。这些问题应该消失了,您会把钥匙找回来的!
Caleb

Answers:


10

要查看您的终端在按某个键时正在发送什么,请切换到插入模式,然后按Ctrl+V,然后按键。大多数终端上的大多数键都会发送一个转义序列,其中只有第一个字符是控制字符。Ctrl+V从字面上插入下一个字符,因此您将以这种方式插入整个转义序列。

对于某些按键组合,不同的终端发送不同的转义序列。许多终端^O都为Ctrl+O和发送相同的字符()Ctrl+Shift+O。如果是这样,Vim将无法区分它们。

您提到您正在使用Cygwin;您在哪个终端上运行Vim是最相关的信息。如果您使用的是本机Windows控制台,请为自己提供一个更好的终端。我建议 MinTTY在X以外的Windows终端中运行Cygwin文本模式应用程序,但是Cygwin的Windows原生RXVT和PuTTYcyg也不错。(也可以使用Console2来运行Windows控制台应用程序,但这在这里完全是题外话)。


3

如果Control+V后面跟随ALT-x显示^[x(在终端中输入),则可以使用vim.wikia.com中的这个小脚本对其进行修复

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

为所有alt键映射添加到.vimrc。


1

这适用于我在Ubuntu 16.04 xfce终端(以及alacritty rust终端)上

将ultisnip片段触发器设置为Meta-/(就像emacs片段一样)

let g:UltiSnipsExpandTrigger="^[/"

现在我^[/在这里输入vim

在插入模式下 Ctrl-V Alt-/

MetaAlt我的PC键盘上的键)


-1

M(eta)键是Windows按钮。只是<A-o>


这也不起作用。
埃里克·威尔逊

并非总是如此,在不同的键盘布局和语言区域设置中,它们通常是不同的。
Caleb

@Caleb是否有任何相关文档?
埃里克·威尔逊

我尝试了map <A-o> o<ESC>,对我有用。如果您将其放入.vimrc,是否重新加载了?
Martin Ueding 2011年

询问者已经在他们的问题中说过,他们已验证文件正在加载。这与用户无关,因为它们位于Windows上,但是您可以在xkb geometry / symbol / keycode文件中看到不同的Meta / Win / Alt键配置。您甚至会注意到,即使在gnome键盘布局选项中,也可以通过几种常用方法在Alt / Win / Meta之间重新映射。存在这种情况的原因之一是由于基本布局中的差异。
Caleb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.