例如如果我输入: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>
,而这只是提到函数名?
答案 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>