【问题标题】:Doing an insert remapping for commenter为评论者进行插入重新映射
【发布时间】:2020-04-18 01:51:24
【问题描述】:

当我处于插入模式以插入评论时,我正在尝试重新映射,但我很难弄清楚所有键映射到什么。我想做的是:

:inoremap leadercspace ==> escleaderc空格i

基本上,如果我处于插入模式,我想退出插入模式以插入注释(leader+c+space),然后返回插入模式。

正确的:inoremap 映射是什么?我现在拥有的是:

:inoremap <leader>c<space> <Esc><Leader>c<space>i

但这似乎不起作用(至少它的后半部分 - 它似乎正在执行映射命令)。注意:我要重新映射的插件是:

https://github.com/preservim/nerdcommenter

[count]&lt;leader&gt;c&lt;space&gt; |NERDCommenterToggle|

切换所选行的注释状态。如果最上面的选定行被注释,则所有选定的行都被取消注释,反之亦然。

【问题讨论】:

  • 交叉发布here

标签: vim


【解决方案1】:

来自 vim 文档 (:help nore):

不允许映射 {rhs},以避免嵌套和递归映射

换句话说,nore 部分禁止将映射应用于rhs(右侧)。

因此,在您的情况下,&lt;Esc&gt;&lt;Leader&gt;c&lt;space&gt;i 不会因此触发 VimCommenter 映射。

要允许递归,可以去掉nore

:imap <leader>c<space> <Esc><Leader>c<space>i

【讨论】:

  • Zordi -- 谢谢你。您能否解释一下为什么 &lt;Esc&gt;&lt;Leader&gt;c&lt;space&gt;i 部分会被视为“递归”?
  • 为了让您对点击&lt;Leader&gt;c&lt;space&gt; 发表评论,NerdCommenter 创建了一个映射,您应该可以使用:nmap &lt;Leader&gt;c&lt;space&gt; 看到它。因此,通过在原始帖子中定义映射,您创建了一个映射,该映射本身称为映射,这就是我所说的“递归”
【解决方案2】:

我的建议是,不要为此创建插入模式映射,而是使用本机 Ctrl+O 映射从插入模式运行单个普通模式命令。

假设您的领导密钥设置为默认的\,您可以使用:

Ctrl+O, \, c, 空格

在此序列结束时,您将处于插入模式。

这种方法相对于插入模式映射的优点是:

  • 您不需要任何额外的配置,因为Ctrl+O 是本机 Vim 命令。
  • 这适用于任何普通模式命令,因此您无需为您可能希望能够从插入模式访问的其他命令添加额外的映射。
  • 在插入模式下添加一个以&lt;Leader&gt; 开头的多字符映射意味着如果您插入前导字符,Vim 将始终暂停并保持。在这种情况下,当您插入&lt;Leader&gt;c 时,它也会暂停。我发现避免这种其他可打印字符的映射通常是最好的。

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 2018-09-14
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2020-10-12
    相关资源
    最近更新 更多