【问题标题】:Any mapping in vimrc with Alt isn't workingvimrc 中使用 Alt 的任何映射都不起作用
【发布时间】:2018-03-01 15:07:14
【问题描述】:

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

【问题讨论】:

  • 如果问的不是太多,谁能解释一下答案。我不明白。
  • 我用的是linux而不是mac
  • @AlG 当我在插入模式下按 ALT+j 时,vim 回到正常模式,光标下移一行
  • @halfer,我以后会坚持的。对不起。

标签: vim


【解决方案1】:

首先,将其添加到您的 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>==

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

【讨论】:

    【解决方案2】:

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

    $ sed -n l

    我在 Ubuntu 上,Alt+j 导致

    ^[j

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

    如果您在使用 &lt;A+j&gt; 组合键时遇到困难,您可以获取发送到 vim 的内容,然后在 .vimrc 中使用它。

    如下:

    nnoremap ^[j :m .+1&lt;CR&gt;==

    这会将&lt;Alt + J&gt; 映射到向上移动一行。

    注意:不要将nnoremap ^[j :m .+1&lt;CR&gt;== 复制并粘贴到您的.vimrc 中。您将必须在终端中找到正在发送的键码,它可能与 ^[j 非常不同,因为每个终端可能会向 vim 发送不同的键码。我正在使用在 VM 上运行的 Putty + Ubuntu。

    【讨论】:

    • 在 Windows 下使用 WSL 在 Ubuntu 上尝试这个。发送的键码是 ^[j 和 ^[k 就像你一样。但是添加我的 vimrc 中提到的行没有任何作用
    • 是的,同样的经历/问题 - 在 Ubuntu (WSL2) 上也无济于事。 仍然只是让我退出,例如从 INSERT 模式到 NORMAL 模式,但仅此而已(例如在 NORMAL 或 VISUAL 模式下,因为我还添加了 inoremap 和 vnoremap))
    【解决方案3】:

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

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

    【讨论】:

    • 为了触发这个地图,您需要按 Alt+Shift+J 或 Alt-Shift-K,因为我们使用的是大写的 J 和 K。
    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 2017-05-23
    • 2019-07-22
    • 2018-10-31
    • 2018-11-07
    • 2023-03-09
    • 2014-06-12
    • 2014-11-13
    相关资源
    最近更新 更多