如何映射Alt键?


37

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

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

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

我缺少什么?

我在OSX上使用Terminal,在远程Linux上也是如此。


在上Ctrl + vAlt + j我有:?~H~Fwhen encoding=utf-8)。

在上Ctrl + vAlt + k我有:?~Z˚when encoding=utf-8)。

在没有插件的情况下运行vim(-u NONE)没有任何区别。


1
Alt(新闻,不保持),然后j工作?随着xterm至少我需要设置metaSendsEscape,以true 获得这些序列的工作......我不知道你是否有同样的问题,我不使用OSX所以我无法测试...
马丁Tournoij

@Carpetsmoker按Alt,释放,然后按j或任何其他键都可以正常进行。我已经检查并找到了“使用选项作为元键”选项,并将其启用,并且现在可以使用。所以设置metaSendsEscape就成功了,谢谢。
kenorb'3

3
这个问题以前回答(用更好的响应)位置:stackoverflow.com/questions/6778961/...
user3751385

Answers:


35

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

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

为此,我进入控制台并运行sed -n l(您也可以使用cat它)。然后我按ALT+ J,然后看屏幕上的字符是^[j

我替换^[\e(因为这是我按下时终端发送的信息esc),最后一个字符串是\ej

然后我写到我的.vimrc

execute "set <M-j>=\ej"
nnoremap <M-j> j

并且映射有效。


4
我找不到该:set <M-j>=\ej零件的文档。我应该搜寻什么?
Evgeni Sergeev

1
感谢您的回答,这是唯一对我有用的解决方案,其中包含Iterm + vim
newUserNameHere 2015年

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

1
@EvgeniSergeev See:help :set-termcap
Rich

9

Carpetsmoker的帮助下,似乎没有将Terminal配置为“使用Alt / option作为元键”(这对于GUI Terminal来说尤其常见)。

对于OSX上的终端,它位于首选项->设置->键盘选项卡->'将选项用作元键'中。检查:如何更改终端以将选项用作元密钥?小牛)。

对于XTerm,请检查:将XTerm配置为默认为Meta发送Escape,这表示:

将此行添加到您的个人.Xdefaults文件(~/.Xdefaults)中的任何位置:

xterm*metaSendsEscape: true

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

xrdb -l ~/.Xdefaults

然后使用如下Alt键进行标准映射:

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

工作正常。

如需帮助,请参阅::h :map-alt-keys


4
也可能希望将其:h :map-alt-keys视为另一种信息来源
Peter Rincker

4

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

在正常模式下,按:或插入后,.vimrc可以通过启动映射直接映射输入:

nnoremap 

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

nnoremap ^[[1;3D

但每个^[字符都是单个的文字转义字符,语法高亮应显示这一点。用文字替换文字转义符<Esc>,并附加您要使用的命令:

nnoremap <Esc>[1;3D <C-w>h

我知道OP正在映射Alt+字母,但是我使用箭头来说明如何对默认情况下未映射的内容进行处理。


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

2

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

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

let g:UltiSnipsExpandTrigger="^[/"

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

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

MetaAlt我的PC键盘上的键)


1

如果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。

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.