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

edd*_*ark 3 vim

我的 .vimrc 中有一些带有 ALT 的映射。他们是:

nnoremap <A-J> :m .+1<CR>==
nnoremap <A-K> :m .-2<CR>==
Run Code Online (Sandbox Code Playgroud)

预期行为:这两个映射应该上下移动一行。但他们没有工作。我什至没有收到任何错误或警告。但当我使用班次时,它们工作正常。下面给出了工作映射。

nnoremap <A-J> :m .+1<CR>==
nnoremap <A-K> :m .-2<CR>==
Run Code Online (Sandbox Code Playgroud)

为什么 ALT 不起作用?

Raz*_*aza 6

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

alias vim="stty stop '' -ixoff ; vim"
Run Code Online (Sandbox Code Playgroud)

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

$ sed -n l
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 上,Alt+j 会导致

^[j
Run Code Online (Sandbox Code Playgroud)

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

将其添加到您的.vimrc

map <Esc>j <A-j>
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用它来映射到其他函数:

nnoremap <A-j> :m .+1<CR>==
Run Code Online (Sandbox Code Playgroud)

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