我遇到一种情况,我想查看所有名称相同的文件(例如,所有名为index.js
的文件)。
我最终一次打开了它们……但是也许有一种方法可以一次全部打开它们……?
替代策略
我确实找到了所有这些文件中都存在的可搜索术语,这有助于识别所有文件(至少我希望如此),这似乎比用cmd-p
重复打开文件要容易一些。
答案 0 :(得分:1)
默认情况下,直接在Sublime中没有方法可以让您一次打开多个文件。可以通过插件/外部包添加这种功能。据我所知,Package Control上没有类似的东西,但是那里有很多软件包,而且很可能是隐藏的。
由于Sublime可以完成大部分繁重的工作,因此编写这样的插件总体上很简单,但是它需要Python的知识。比较棘手的部分是弄清楚应该打开哪些文件。
在另一方面,Sublime附带了一个名为subl
的命令行帮助工具,该工具与正在运行的Sublime副本进行对话并根据需要启动一个副本。假设它在您的路径上可用,则可以通过这种方式打开特定文件夹中的所有JavaScript文件。
tmartin:dart:~> subl *.js
这将在最近激活的Sublime窗口中打开所有匹配的文件;您可以加入-n
来告诉Sublime应该先打开一个新窗口,然后将文件放在那里:
tmartin:dart:~> subl -n *.js
这也适用于文件夹和文件,将文件夹添加到当前窗口或在打开该文件夹的情况下创建一个新窗口。
有关其他可用选项的更多信息,请参见subl --help
,包括在确切位置打开文件。
如果您使用的是Linux或MacOS,则可以通过两种不同的方式扩展此技术以在当前文件夹的子文件夹中打开文件。
注意: 以下内容不适用于Windows(至少在标准命令提示符中),因为Windows本身不会扩展文件全局范围,而Sublime必须这样做本身,它可以处理诸如
*.js
之类的简单glob,但不能处理包含文件夹的更复杂的glob。
如果文件夹结构较浅,则可以在命令行中包含多个术语。例如,如果只有一个目录级别深:
tmartin:dart:~> subl -n *.js */*.js
如果有两个目录级别,则由于shell遍历规则,您需要包括另一个术语以使其与之匹配:
tmartin:dart:~> subl -n *.js */*.js */*/*.js
对于除一两个级别之外的任何内容,这都是相当乏味且容易出错的,在这种情况下,我建议您改用find
实用程序:
tmartin:dart:~> subl -n `find . -name '*.js'`
此处,find
命令在当前文件夹(.
)中搜索名称与*.js
相匹配的所有文件,然后递归执行。完成后,结果将放入字符串中。请注意,将glob包装在'single quotes'
中非常重要,告诉外壳程序不应尝试自行扩展它们。
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
而不是一次全部传递它们,但是我离批处理文件大师还很远