vim`:imap`输出中的所有标记是什么意思?

时间:2018-08-08 03:34:04

标签: vim

例如如果我输入:im,则会输出一长串有关插入模式映射的消息。

i  <Plug>(fzf-maps-i) * <C-O>:call fzf#vim#maps('i', 0)<CR>

i用于插入模式。

:help <Plug>表示您将其用于“不与任何键序列匹配的内部映射”。这有什么用?如果您设法按下不可按下的组合键,它将打开:Maps终端缓冲区?除了这种特定情况,您为什么还要绑定不可压的绑定?

接下来,我们有了*。它指的是什么? :helpgrep star:helpgrep *使我失望。

接下来我们有这行:

i  <Plug>(fzf-complete-file-ag) * fzf#vim#complete#path('ag -l -g ""')

为什么上面的第一行只使用*,然后仍然使用<C-O>:call ... <CR>,而这只是提到函数名?

1 个答案:

答案 0 :(得分:3)

  

<Plug> [...]这有什么用?如果您设法按下不可按下的组合键,它将打开:Maps终端缓冲区?

这是一个不可按的键组合。这并不意味着它不能生成。如果您查看fzf.vim的文档,将看到用户可以在其.vimrc中插入的相关映射的示例:

nmap <leader><tab> <plug>(fzf-maps-n)

如果用户随后按下 Leader Tab ,它将生成<plug>(fzf-maps-n)。此映射不是noremap,因此它将触发插件定义的map <plug>(fzf-maps-n)映射。这样,插件可以显示可映射的键序列,但是对于用户可能意外触发的副作用没有任何副作用;尽管他们仍然可以根据需要映射到它。

  

接下来,我们有*

:help map-listing会告诉您*表示它不可重映射(即由inoremap而非imap创建)。

  

为什么上面的第一行只使用*,然后仍然使用<C-O>:call ... <CR>,而这只是提到函数名?

从清单中看不到它,但是创建它的命令是:

inoremap <expr> <plug>(fzf-complete-file-ag)     fzf#vim#complete#path('ag -l -g ""')

请注意<expr>修饰符。 :help :map-<expr>