[英]Passing input to a fzf shortcut in vimrc
我在vimrc中有一个映射,可以为特定目录调用fzf。
:map <F4> :Files my_directory_path_here <CR>
这很好。 这会弹出一个窗口,我可以搜索文件的一部分以查看所有可能的文件。
我正在寻找一种将输入(当前日期为mmdd格式)传递到上面的映射的方法。
我抬起头,便找到了一种将其映射到其他键的方法。
imap <F5> <C-R>=strftime("%m%d")<CR>
但是,如何将其作为输入添加到键映射中呢?
谢谢。
这取决于插件的实现方式。 如果它只是发出简单命令,然后进入插入模式(例如,通过: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的作者进行增强,或者使用单独的辅助映射来解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.