Vim 为commenter执行插入重新映射

Vim 为commenter执行插入重新映射,vim,Vim,当我在插入模式下插入一条注释时,我试图重新映射,但是我很难弄清楚所有的键映射到什么。我想做的是: :inoremap leadercspace==>escleadercspace i 基本上,如果我处于插入模式,我想退出插入模式,插入注释(leader+c+空格),然后返回插入模式 正确的:inoremap映射应该是什么?我现在得到的是: :inoremap <leader>c<space> <Esc><Leader>c<space>i

当我在插入模式下插入一条注释时,我试图重新映射,但是我很难弄清楚所有的键映射到什么。我想做的是:

:inoremap leadercspace==>escleadercspace i

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

正确的
:inoremap
映射应该是什么?我现在得到的是:

:inoremap <leader>c<space> <Esc><Leader>c<space>i
:inoremap c ci
但这似乎不起作用(至少在它的后半部分——它似乎正在执行映射命令)。注意:我尝试重新映射的插件是:

[count]c | NerdCommonIntertoggle |

切换选定行的注释状态。如果注释了最上面的选定行,则所有选定行均未注释,反之亦然

从vim文档(
:help nore
):

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

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

因此,在您的例子中,
ci
不会因此触发VimCommenter映射

要允许递归,可以去掉
nore

:imap <leader>c<space> <Esc><Leader>c<space>i
:imap c ci
来自vim文档(
:help nore
):

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

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

因此,在您的例子中,
ci
不会因此触发VimCommenter映射

要允许递归,可以去掉
nore

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

我的建议是,与其为此目的创建插入模式映射,不如使用本机映射从插入模式运行单个正常模式命令

假设您的引导键设置为默认值
\
,则可以使用:

Ctrl+O、\、c、空格

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

与插入模式映射相比,此方法的优点是:

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

我的建议是,不要为此目的创建插入模式映射,只需使用本机映射从插入模式运行单个正常模式命令即可

假设您的引导键设置为默认值
\
,则可以使用:

Ctrl+O、\、c、空格

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

与插入模式映射相比,此方法的优点是:

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

Zordi——谢谢你的帮助。请您解释一下为什么将
ci
部分视为“递归的”?为了允许您对点击
c
进行评论,NerdCommenter创建了一个映射,您应该可以使用
:nmap c
查看该映射。因此,通过在您最初的帖子中定义映射,您创建了一个映射,它本身将称为映射,这就是我所称的“递归”Zordi——谢谢。请您解释一下为什么将
ci
部分视为“递归的”?为了允许您对点击
c
进行评论,NerdCommenter创建了一个映射,您应该可以使用
:nmap c
查看该映射。因此,通过在原始帖子中定义映射,您创建了一个映射,它本身将称为映射,这就是我所谓的“递归”交叉发布。交叉发布。