我的vimrc中有一个映射,可以为特定目录调用fzf。
:map <F4> :Files my_directory_path_here <CR>
这很好。这会弹出一个窗口,我可以搜索文件的一部分以查看所有可能的文件。
我正在寻找一种将输入(当前日期为mmdd格式)传递到上面的映射的方法。
我抬起头来,找到了一种将其映射到其他键的方法。
imap <F5> <C-R>=strftime("%m%d")<CR>
但是如何将其作为输入附加到我的键映射中?
谢谢。
答案 0 :(得分:1)
这取决于插件的实现方式。如果它只是发出简单命令,然后进入插入模式(例如,通过: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中读取输入的整体实现非常简单:用户可以填充一个键缓冲区;只要检测到完整的命令,就会暂停从缓冲区的读取,执行该命令,然后继续读取(即使在此期间该命令更改了当前的 mode )。
如果该简单方法不起作用,则可以使用: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的作者进行增强,或者采用单独的辅助映射的解决方法。