这取决于插件的实现方式。如果它只是发出简单的命令然后进入插入模式(例如 via :startinsert
),那么只需将键附加到原始映射即可:
:map <F4> :Files my_directory_path_here <CR><C-R>=strftime("%m%d")<CR>
我不使用 fzf (仅使用较旧的 FuzzyFinder),但恐怕它不适用于插件,如果它做更复杂的事情。这是一个适合我的演示(所以你相信我):
:map <F4> :startinsert<CR><C-R>=strftime("%m%d")<CR>
在 Vim 中读取输入的整体实现非常简单:有一个由用户填充的键缓冲区;每当检测到完整的命令时,暂停从缓冲区读取,执行命令,然后继续读取(即使命令同时更改了当前模式)。
如果这种简单的方法不起作用,那么有:help feedkeys()
一个低级函数可以让您在任何待处理的键之后直接写入输入缓冲区。
:map <F4> :call feedkeys("\<lt>C-R>=strftime('%m%d')\<lt>CR>", 't')<Bar>startinsert<CR>
除了映射的丑陋转义(\<lt>
而不是<
)之外,这只是将输入缓冲区的填充放在命令之前,但这些键仅在它之后执行。
不幸的是,至少对于我的 FuzzyFinder 来说,这仍然不起作用,因为插件feedkeys()
自己使用它来构建它的 UI(它需要启动插入模式并触发完成弹出窗口;没有 就无法完成的事情feedkeys()
)。有了这个,我们在 Vim 中的抽象已经用完了,所以似乎没有办法,除了直接扩展插件,以便它以某种方式将“输入预设”作为可选参数。因此,如果您确实遇到了 fzf 的相同问题,但认为这是一个重要功能,请向 fzf 的作者提出增强建议,或者使用单独的辅助映射的解决方法。