[英]How to fzf recent files of vim/nvim, not inside vim but from terminal
我知道如何打開 fzf.vim,但我想從終端打開。
grepping history 或 viminfo 可能會實現,但我想知道是否有任何聰明的方法。
這是將最近文件列表從vim
保存到文件的方法:
vim -c "call append(0, v:oldfiles)" -c "write vim-oldfiles.tmp" -c exit
將v:oldfiles
(保存在~/.viminfo
中的最近文件列表)放入第一個(新的並且在開始時為空)緩沖區,將緩沖區寫入文件,退出。
現在您可以將文件的內容傳遞給fzf
。
不是確切的解決方案。 但是您可以像 IDE 一樣在 vim 編輯的下部打開一個終端緩沖區並使用您的終端 fzf
但是,不確定這是否會讓您在新的 vim 選項卡中打開文件
如果您在路徑中有~
的文件上執行 vim 時遇到問題(vim 打開一個新的空白文件而不是所需的文件),因為 fzf 和 vim 不擴展波浪號( ~
),我是這樣做的:
export FZF_DEFAULT_OPTS=$FZF_DEFAULT_OPTS"
--bind 'ctrl-e:execute(vim -c \"execute \\\"edit\\\" expand({})\" >/dev/tty)'
"
這是基於此的反復試驗。
我有一個名為 old 的 zsh 自動加載函數:
function old(){
vim -c 'redir >> /tmp/oldfiles.txt | silent oldfiles | redir end | q'
sed -i '/NvimTree$/d' /tmp/oldfiles.txt
local fname
fname=$(awk '/home/ && !/man:/ {print $2}' /tmp/oldfiles.txt | fzf) || return
vim "$fname"
\rm /tmp/oldfiles.txt
}
結合其他一些答案,這是一個不需要臨時文件並寫入標准輸出的版本(因此您可以將其通過管道傳輸到另一個命令,或使用$(...)
捕獲輸出)。
vim -e -c "redir >> /dev/fd/100 | for f in v:oldfiles | silent echo substitute(f, \"^\\\\~\", \$HOME, \"g\") | endfor | redir end | q" 100>&1 &>/dev/null
此解決方案結合了其他解決方案的元素,但有一些改進:
100>&1
),然后使用/dev/fd/100
強制在那里寫入輸出。 這確保 vim 實際上寫入標准輸出而不是終端。 請注意,這也可以使用/dev/fd/1
進行(但僅在由於某種原因省略redir end
時),但是我們不能應用下一點。/dev/null
,以防止vim在啟動時將一些終端轉義碼寫入stdout,因此使用不同的fd可以確保干凈的輸出。vim -e
)下使用 vim 來抑制“Vim:警告:輸出不是終端”輸出和伴隨的延遲。 [來源]v:oldfiles
以僅輸出文件名( https://stackoverflow.com/a/70749181/740048使用的oldfiles
命令添加了行號)。append
/ write
組合,該組合與/dev/fd/100
技巧一起使用,但最終將/dev/fd/100
放入列表中oldfiles,所以我沒有使用這種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.