任何在vimrc中使用Alt键的映射都无法工作

3
我在我的.vimrc文件中有一些使用ALT键的映射。它们分别是:
nnoremap <A-J> :m .+1<CR>==
nnoremap <A-K> :m .-2<CR>==

期望的行为:这两个映射应该使一行向上或向下移动。但它们没有起作用。我甚至没有收到任何错误或警告。但当我使用shift键时,它们可以正常工作。以下是可行的映射。

nnoremap <A-J> :m .+1<CR>==
nnoremap <A-K> :m .-2<CR>==

为什么ALT键不起作用?

1
可能是 https://dev59.com/E2s05IYBdhLWcg3wB9af 的重复问题。 - AlG
如果可以的话,有人能否解释一下答案,这个我不太懂。 - odbhut.shei.chhele
我正在使用Linux而不是Mac。 - odbhut.shei.chhele
1
@AlG 当我在插入模式下按下ALT+j时,vim会返回正常模式并将光标向下移动一行。 - odbhut.shei.chhele
艾德华:如之前所建议的那样,Stack Overflow 的用户通常更喜欢您在提问时避免使用“请帮忙”、“谢谢”、“先行致谢”和其他聊天式的内容。尽可能地专注于细节即可。参见此处此处 - halfer
1
@halfer,以后我会坚持的。抱歉。 - odbhut.shei.chhele
3个回答

6

首先,将以下内容添加到你的 zsh 文件中:

alias vim="stty stop '' -ixoff ; vim"

这不是必要的,但它可以消除vim映射问题。其次,从查看终端发送给vim的按键代码开始:

$ sed -n l

我在使用Ubuntu系统,按下Alt+j会进行以下操作:
^[j

这基本上是将从终端发送到vim的键码组合打印出来。请注意,第一部分 ^ [ Escape 键,而不是按下的键的一部分。

将此添加到您的 .vimrc

map <Esc>j <A-j>

之后,您可以使用此内容映射到其他功能:
nnoremap <A-j> :m .+1<CR>==

Source: https://vim.fandom.com/wiki/Mapping_fast_keycodes_in_terminal_Vim


希望有人能够解释一下为什么。 - CervEd

4

首先查看终端发送给vim的关键代码:

$ sed -n l

我在Ubuntu上,Alt+j 导致:

^[j

这基本上打印出从您的终端发送到vim的按键组合。

如果您遇到 <A+j> 按键组合的困难,可以获得发送给vim的内容,然后在 .vimrc 中使用它。

如下所示:

nnoremap ^[j :m .+1<CR>==

这将映射 <Alt + J> 到向上移动一行。

注意:不要复制和粘贴 nnoremap ^[j :m .+1<CR>== 到您的 .vimrc。您必须找到在您的终端中发送的按键组合,它可能与 ^[j 非常不同,因为每个终端可能会发送不同的按键组合到vim。我正在使用Putty + Ubuntu运行在虚拟机上。


在 Windows 上使用 WSL 尝试此操作。发送的键码与您一样为 ^[j 和 ^[k。但是,添加我 vimrc 中提到的行没有任何作用。 - Nicolas
是的,我也有同样的经验/问题 - 在Ubuntu(WSL2)上也没有任何帮助。 <Alt+j> 仍然只是将我从插入模式抛出到正常模式,但没有更多的作用(例如在正常或可视模式下,因为我还添加了inoremap和vnoremap)。 - GWD

0

要映射 Alt 键,您必须使用 M 而不是 A。

nnoremap <M-J> :m .+1<CR>==
nnoremap <J-K> :m .-2<CR>==

为了触发这个映射,你需要按下Alt+Shift+J或者Alt-Shift-K,因为我们使用的是大写字母J和K。 - SergioAraujo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接