Vim FZF:按文件日期对初始结果进行排序

4

我有一个vim映射:

nnoremap <silent> <leader><space> :Files<CR>

是否可以更改初始列表中的排序方式?
最好能够首先看到最近更改的文件。
当我开始搜索时,fzf的正常排序就可以了。

1个回答

3
我知道没有简单的方法。
但是你可以编写一个函数,按日期排序获取文件列表(请注意,以下代码未经过测试):
let l:filelist = split(system(find . -type f -printf '%T@ %p\n' | 
                              \ sort -k 1 -n | sed 's/^[^ ]* //'), 'n')

有些其他命令,取决于您的环境可以使用。但是,这里首先出现了一些问题。该命令列出您目录中的所有文件。为了尊重您的gitignore或其他内容,需要进行更多工作。 此外,这比fzf慢得多!

一旦您获得列表,就可以再次使用fzf:

call fzf#run({'source': l:filelist, 'sink': 'e', 'down': '40%'})

我认为这对于小项目可能会运行良好,但如果你有一个更大的项目,它就太慢了,如果你使用像重新构建资产的rails之类的东西,你将不得不过滤结果。


更新:

正如r03在评论中提到的那样,如果您想全局使用此变量,则也可以编辑FZF_DEFAULT_COMMAND变量。不需要将其传递给vimscript。


也许可以使用像ag或ripgrep这样的工具?但是使用ag时,我没有看到打印日期的选项。 - roeland
也许,正如我所说,有很多工具可用。只要明确一点,您无需打印日期,只需要按日期排序即可。 - Doktor OSwaldo
@r03,感谢您的更新。那实际上是一种相当不错的编辑FZF行为的方式。您的脚本速度如何? - Doktor OSwaldo
这对于普通项目来说非常快,但在我的完整主文件夹上不可用 :-) 我需要改进这个。也许添加一个文件数量限制或其他什么东西。如果达到了限制,则不进行排序。 - roeland
@ro3 在我家里(约300k个文件)fzf也很慢,所以这并不是什么新鲜事。但是在加载时fzf是可用和可操作的。 - Doktor OSwaldo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接