使用SublimeText3,如何打开所有同名文件

Using SublimeText3, how to open all files with the same name

我遇到过这样一种情况,我想查看所有同名文件(例如所有名为 index.js 的文件)。

我最终一次打开它们...但也许有一种方法可以一次打开它们...?

备用策略

我确实在所有这些文件中找到了一些可搜索的术语,这有助于识别所有文件(至少我希望如此),这似乎比使用 cmd-p...[ 重复打开文件要容易一些。 =12=]

直接在 Sublime 中,默认情况下没有允许您一次打开多个文件的方法。可以通过 plugin/external 包添加此类功能。据我所知,目前 Package Control 上没有类似的东西,但那里有很多包,而且很可能隐藏起来。

编写这样的插件总体上相当简单,因为 Sublime 完成了大部分繁重的工作,但它需要 Python 的知识。比较棘手的部分是确定应该打开哪些文件。

另一方面,Sublime 附带了一个名为 subl 的命令行帮助工具,它与 Sublime 的 运行 副本对话并根据需要启动一个。假设它在您的路径上可用,则可以通过这种方式打开特定文件夹中的所有 JavaScript 文件。

tmartin:dart:~> subl *.js

这将在最近活动的 Sublime 中打开所有匹配的文件 window;你可以包含 -n 来告诉 Sublime 它应该首先打开一个新的 window 并将文件放在那里:

tmartin:dart:~> subl -n *.js

这也适用于文件夹和文件,它将文件夹添加到当前 window 或创建一个新的 window 打开该文件夹。

有关其他可用选项的详细信息,包括在确切位置打开文件,请参阅 subl --help


[编辑]

如果您使用的是 Linux 或 MacOS,您可以扩展此技术以通过几种不同的方式打开当前文件夹的子文件夹中的文件。

NOTE: The following does not apply to Windows (at least in the standard command prompts) because Windows doesn't expand file globs itself and Sublime has to do this itself, which it can do for simple globs like *.js but not for more complex ones that include folders.

如果您的文件夹结构较浅,则可以在命令行中包含多个术语。例如,如果只有一层目录深度:

tmartin:dart:~> subl -n *.js */*.js

如果有两个目录级别,由于 shell globbing 规则,您需要包含另一个术语来匹配它:

tmartin:dart:~> subl -n *.js */*.js */*/*.js

除了一个或两个级别之外,这相当乏味且容易出错,在这种情况下,我建议改用 find 实用程序:

tmartin:dart:~> subl -n `find . -name '*.js'`

此处 find 命令在当前文件夹 (.) 中搜索名称与 *.js 匹配的所有文件,这是递归执行的。完成后,结果将放入一个字符串中。请注意,将 glob 包裹在 'single quotes' 中以告诉 shell 它不应该尝试自行扩展它们很重要。

find 命令周围的反引号告诉 shell 先执行它,然后将结果用作 subl -n 命令的参数。

查找操作的结果是相对于起始位置的,因此您也可以从任何地方执行类似 find /Users/tmartin/projects/*.js 的操作以查找所有合适的文件。

Windows 没有像这个一样工作的 find 实用程序,但是使用一点批处理文件功夫,您可以创建一个批处理文件来做同样的事情:

@ECHO OFF

IF "%~1" == "" GOTO ERROR
subl -n
FOR /f "usebackq tokens=*" %%a IN (`dir %* /b/s`) DO subl "%%a"

GOTO DONE

:ERROR
ECHO Provide a file glob on the command line.

:DONE

如果有很多文件,这有点次优,因为它需要为每个要打开的文件执行一次 subl,而不是一次传递所有文件,但我离批处理还很远文件大师。