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

lan*_*nza 3 vim

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

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

用于i插入模式。

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

接下来,我们有*. 它指的是什么?:helpgrep star或者:helpgrep *让我失望。

接下来我们有这一行:

i  <Plug>(fzf-complete-file-ag) * fzf#vim#complete#path('ag -l -g ""')
Run Code Online (Sandbox Code Playgroud)

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

Ama*_*dan 5

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

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

nmap <leader><tab> <plug>(fzf-maps-n)
Run Code Online (Sandbox Code Playgroud)

如果用户再按下LeaderTab,就会生成<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 ""')
Run Code Online (Sandbox Code Playgroud)

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