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