使用Alt的vimrc中的任何映射都不起作用

时间:2018-03-01 15:07:14

标签: vim

我的.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不工作?

3 个答案:

答案 0 :(得分:1)

首先查看终端发送给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发送不同的密钥代码。我正在使用在VM上运行的Putty + Ubuntu。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

首先,将其添加到您的zsh文件

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

这不是必需的,但它确实消除了vim映射问题。其次,首先查看您的终端发送给vim的密钥代码:

$ sed -n l

我在Ubuntu上,Alt + j指向

^[j

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

将此添加到您的.vimrc

map <Esc>j <A-j>

之后,您可以使用它映射到其他功能:

nnoremap <A-j> :m .+1<CR>==

来源: https://vim.fandom.com/wiki/Mapping_fast_keycodes_in_terminal_Vim