【问题标题】:Using SublimeText3, how to open all files with the same name使用 SublimeText3,如何打开所有同名文件
【发布时间】:2018-08-24 16:43:56
【问题描述】:

我有一种情况,我想查看所有名称相同的文件(例如,所有名为 index.js 的文件)。

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

替代策略

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

【问题讨论】:

  • 我假设你的意思是你在 Sublime 中并且想要点击一个命令来完成它而不是从控制台启动 Sublime 并打开它们?
  • 有没有办法通过命令行使用 Sublime 打开所有类似命名的文件? (因为任何一种方式都适合我)
  • 确实有;请参阅下面的答案。在 Sublime 中,它仍然可以通过插件实现,但是由于当前 API 没有公开当前文件索引,因此必须找到合适的文件很复杂,因此您必须求助于手动 os.walk()fnmatch.fnmatch()或类似的东西(你也必须熟悉 Python)。

标签: sublimetext3 sublimetext


【解决方案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 本身不会扩展文件 glob,Sublime 必须这样做本身,它可以用于像 *.js 这样的简单全局,但不能用于包含文件夹的更复杂的全局。

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

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' 中很重要,以告诉 shell 它不应该尝试自行扩展它们。

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

查找操作的结果与起始位置相关,因此您也可以在任何地方执行find /Users/tmartin/projects/*.js 之类的操作来查找所有适当的文件。

Windows 没有像这个一样工作的find 实用程序,但是使用一个小批处理文件 kung-fu,您可以创建一个执行相同操作的批处理文件:

@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,而不是一次全部传递它们,但我远非批处理文件大师。

【讨论】:

  • 当我运行subl -n *index.js 时,我得到一个新的崇高窗口,其中包含应用程序根目录中的index.js 文件,但没有其他任何一个(其他嵌套更深)... .我尝试了subl -n **/*index.js 的变化,但没有运气......
  • 如果您使用的是 MacOS 或 Linux,subl -n *index.js */*index.js 应该可以工作。在 Windows 上,操作系统不会为您扩展文件 glob,Sublime 必须手动进行,显然第二种形式存在问题,因此虽然 *index.js 会扩展,但第二种不会。我知道的唯一方法是使用替代命令处理器,如 git bash 或类似的。
  • hm...仍然没有从*/*index.js(来自 MacOS)获得任何深度嵌套的文件
  • 我在回答中添加了一些有关如何执行此操作的更多信息。
猜你喜欢
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
相关资源
最近更新 更多