簡體   English   中英

將輸入傳遞給vimrc中的fzf快捷方式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM