现在我做⌘t,然后滚动浏览自动完成功能,或开始输入名称(但有一半时间找不到它)。
在许多情况下,Sublime找不到文件。例如,通常我所有名为index.<ext>
的文件都嵌套在某个文件夹中。所以我可能有:
my/long/directory/structure/index.js
my/long/directory/structure2/index.js
my/long/directory/structure3/index.js
my/long/directory/structure.../index.js
my/long/directory/structuren/index.js
my/long/directory/index.js
my/long/directory2/index.js
my/long/directory.../index.js
my/long/directoryn/index.js
my/long/index.js
my/index.js
...
但是在崇高的氛围中,您必须搜索确切路径。我无法搜索:
my directory index
并获取目录,directory2,directory ...,directoryn的结果,因为没有my/directory
,所以我得到的是空结果。我大部分时间都不记得完整的文件夹路径,因此需要花费很多精力,最后我只是在侧边栏中导航以找到需要一些时间的文件。
想知道是否有更好/更快的方法。基本上通过完整路径的代码片段/关键字搜索文件。因此m dir
将返回my/long/directory
,依此类推。
答案 0 :(得分:2)
首先要注意的是,您不必 搜索确切路径; Sublime为您提供可供选择的项目列表和文本输入的任何位置,都在进行模糊匹配。在您的示例中,仅搜索idx
会将列表缩小到按该顺序具有这些字符的所有项,即使它们彼此不相邻也是如此。
条目直观地显示了它们是如何匹配的,并且幕后有一个相当复杂的系统,该系统可以确定哪些字符最匹配(相对于某些隐藏式评分算法):
除此之外,您可以使用多个以空格分隔的术语来过滤列表。每个术语都会应用到上一个术语产生的项目列表中,因此不需要按照文件名中出现的顺序提供它们。
这可以帮助您在通常知道文件名的情况下进行搜索,并从那里进一步细分路径段或其他有助于缩小范围的术语:
此处要注意的是,如这些图像所示,文件夹结构为my/long/directory/structure
,但面板中显示的文件名开头并不包含my/
。
在您的项目仅包含一个顶级文件夹的情况下,该文件夹不会出现在文件名中。大概是因为它对于每个文件都是通用的,因此不会成为有用的过滤器。因此,除非其中一个文件的文件名中包含my
和m
,否则尝试在搜索字段中使用y
不会返回任何匹配项。
如果有多个顶级文件夹,则不是这种情况;在这种情况下,Sublime将在显示的文件名中包含根文件夹,因为现在需要能够区分不同文件夹中的文件:
此外,请注意,对于您在面板中输入的任何给定过滤器文本,Sublime都会记住您使用该过滤器文本时所选项目的全文,并在评分中使用该文本对匹配进行优先排序下次您在同一面板中进行搜索。下次使用相同的字词进行搜索时,Sublime会根据您可能再次想要的理论自动选择您上次选择的项目。
搜索词及其匹配项保存在会话文件和项目的sublime-workspace
文件中,因此,当您从一个窗口移至另一个窗口并从一个项目移至另一个项目时,实际上是在训练Sublime如何查找要查找的文件你想要的。
我的建议是尝试将您的想法稍微翻转一下。我认为,当您尝试以比完全复制路径更有机的方式查找文件时,模糊匹配算法的功能最有效。
相反,我将从要尝试查找的文件的名称中抛出几个字符,然后添加另一个术语,该术语在路径的某些部分进行过滤,这将使更多内容不再歧义。例如,在此示例中,idx s1
一词会立即找到index.js
文件夹中包含的两个structure1
文件。
在一个更真实的示例中,文件夹的名称可能包含它们所属的组件的名称,或者为代码提供逻辑结构的其他名称,因此您可以执行idx con
从index.js
文件夹中拉出controller
或从idx mod
文件夹中找到model
,以此类推。
关于一种更好/更快的方法,至少在一般情况下,我认为没有这种方法。 Sublime固有地知道项目中的每个文件,这是对所有文件建立索引以支持Goto Symbol
等其他功能的一部分,并且它使用文件监视程序来检测打开文件夹的结构更改。
其他任何东西,包括第三方插件或软件包,都需要首先进行冗余文件扫描以累积文件列表,并且还必须复制文件以观察Sublime已经在做的事情,以便知道什么时候发生了变化