我正在尝试通过以下方式映射Alt键:

:map <A-j> j
:map <A-k> k


但这不起作用(贝尔按Alt + j / Alt + k响了)。

我缺少什么?

我在OSX上使用Terminal,在远程Linux上也是如此。 + v,Alt + j,我得到:?~H~Fencoding=utf-8时)。 />
在没有插件的情况下运行vim(?~Z)没有任何区别。

评论

Alt(按住不按住)然后j起作用吗?至少使用xterm,我需要将metaSendsEscape设置为true才能使这些序列正常工作...我不知道您是否遇到相同的问题,并且我不使用OSX因此无法进行测试...

@Carpetsmoker按Alt释放,然后按j或其他任何键都可以正常工作。我已经检查并找到了“使用选项作为元键”选项,并将其启用,并且现在可以使用。因此,设置metaSendsEscape可以解决问题,谢谢。

以前曾在以下位置回答过此问题(并获得了较好的答复):stackoverflow.com/questions/6778961/…

#1 楼

这就是我在Linux或Cygwin上执行的操作:

首先检查按ALT + J时终端发送的字符:

为了执行此操作,请转到控制台并运行sed -n l(也可以使用cat)。然后按ALT + J,然后看屏幕上的字符是^[j。是^[

然后我将其写到我的\e

评论


我找不到:set = \ ej部分的文档。我应该搜寻什么?

– Evgeni Sergeev
2015年6月3日,下午1:05

感谢您的回答,这是唯一对我有用的解决方案,带有Iterm + vim

– newUserName此处
15年6月22日在14:33

不,这不起作用。有时ESC-J将充当ALT-J

–user3751385
16-10-4在5:15

@EvgeniSergeev请参阅:help:set-termcap

–丰富
18年2月15日在22:10

#2 楼

在Carpetsmoker的帮助下,似乎没有将终端配置为“使用Alt / option作为元键”(这对于GUI终端尤为常见)。
对于OSX上的终端,它位于“首选项”->“设置”->“键盘标签->“将选项用作元键”。检查:如何更改终端以将选项用作元密钥? (Mavericks)。对于XTerm,请检查:将XTerm配置为默认到Meta Sends Escape,它说:
xterm*metaSendsEscape: true

然后用xrdb重新加载配置。没有此步骤,~/.Xdefaults中的更改将在下一次X重新启动之前生效:
xrdb -l ~/.Xdefaults


然后使用带有Alt键的标准映射,例如:
:map <A-j> j
:map <A-k> k


有关帮助,请参阅:.Xdefaults

评论


可能还想将:h:map-alt-keys视为另一信息来源

– Peter Rincker
2015年3月4日在17:02

#3 楼

与Kossak的答案类似,但通过映射文字按键来简化。
nnoremap 


然后按Ctrl + V,然后击键进行记录,例如Alt +←。这将显示为以下内容:

nnoremap ^[[1;3D


,但是每个.vimrc都是一个单独的文字转义字符,语法突出显示应显示此内容。将文字转义符替换为文本^[,并追加您要使用的命令: ,但我使用箭头显示了如何处理默认情况下可能未映射的内容。

评论


像魅力一样工作,非常感谢!

–aryndin
19-10-24在9:11

这正是我想要的。我不知道是什么vim将我想要的键组合解释为什么,这向您显示。谢谢!

–雅各布·埃文·史瑞夫(Jacob Evan Shreve)
20-11-25在22:55

#4 楼

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

将ultisnip片段触发器设置为Meta-/(就像emacs片段一样) />现在我在vim中键入^[/

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

Meta是PC键盘上的Alt键)

#5 楼

如果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键映射。