我一直在使用junegunn/fzf.vim在vim中快速查找(隐藏和非隐藏)文件。我just found指出,它也可以设置
path=.,**
字符串
并使用:find some-file
来实现除了模糊搜索之外的几乎相同的功能。由于我很少使用模糊搜索,并且更喜欢使用尽可能少的插件(尽管仍然很多),我正在考虑放弃fzf.vim并完全切换到path/:find-approach。
也就是说,这里缺少了一个重要的功能。据我所知,path
不包括隐藏目录。例如,给定以下目录结构
~/testdir
❯ tree -a
.
|-- .hidden-folder
| |-- some-hidden-file
| `-- some1-hidden
| `-- some2-hidden
| `-- deeply-hidden-file
|-- some-file
`-- some-folder
`-- some1
`-- some2
`-- deep-file
6 directories, 4 files
型
打开vim some-file
,:find deeply-hidden
找不到文件。我假设这是因为它在.hidden-folder
内部,因为找到了:find deep-file
。
有什么方法可以设置**
包括隐藏文件夹以及?也许还可以告诉vim使用特定的搜索命令,这样我就可以配置它来包含隐藏的文件/文件夹。
2条答案
按热度按时间k5hmc34c1#
用于搜索文件的内置例程使用“深度优先搜索”算法,这使得它在许多情况下效率很低。因此
set path=.,**
可能有点过分,因为它将迫使Vim在切换到下一个目录之前查看每个子目录。它 * 可能 * 在某些情况下工作(正如我在你链接的答案中强调的那样),但你应该知道'path'
是作为一个特定目录的列表,在那里有**
有点违背了它的观点。让:find
遍历隐藏目录的“正确”方法是将它们添加到'path'
:字符串
虽然这肯定是对当前情况的改进,但用“更好”的算法(比如iterative deepening depth-first search)替换当前算法只能在Vim的C源代码中完成,因为Vim没有公开
'filesearchprg'
选项或类似选项。ybzsozfc2#
首先,您可能需要
path=.,,**
而不是path=.,**
。.
是编辑文件的目录,空字符串(,,
之间)是当前文件夹-编辑器正在运行的位置。至于你的问题,就像@romainl在另一个答案中说的那样,不幸的是,你不能设置一个选项来使
**
递归到隐藏目录中。path+=**/.*/**,**/.*/**/.*/**
来解决这个问题。这应该有助于:find
和deeply-hidden-file
,在您的情况下。这是一个“黑客”,因为它找到a/b/.c/d/.e/f/g
,但不会找到a/.b/.c/d/.e/f
,例如,因为它是在3级隐藏目录下。因此,要使其工作,您需要添加path+=**/.*/**/.*/**/.*/**
...你会看到这会使搜索速度变慢。NB只在NeoVim中尝试过,但在Vim中也应该可以工作。