我的 .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 不起作用?
首先,将其添加到您的 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