如何通过Sublime Text中的“查找结果”编辑多个文件

16
当我通过 Command + Shift + F 搜索多个文件时,结果会以类似文本文件的形式返回。这个文本文件是可编辑的,但所做的更改不会影响原始文件。
“查找结果”中的更改是否可以传播到原始源文件?

1
据我所知,这是不可能的 - 我已经尝试寻找任何具有类似功能的东西。 - Mikko Ohtamaa
现在可以了。请看我的回答。 - Rafal
在文件中使用正则表达式和捕获组可能会很有用(您甚至可以创建一个具有特定选定或忽略的文件或文件夹的搜索项目)。 - Rivenfall
2个回答

20

这个查找结果应用更改插件就是用来做这个的。

您可以通过Package Control的“安装包”选项安装它。

在使用此插件之前,请确保您已启用UTF-8编码,方法如下:

File > Save with Encoding > UTF-8

安装完成后,您可以将对“查找结果”缓冲区所做的任何更改应用于文件:

  • 在文件夹中搜索“foo”(Sublime的默认快捷键为CTRL+SHIFT+S
  • 这将打开一个“查找结果”缓冲区,列出所有包含“foo”的文件。
  • 更改“foo”的实例为“bar”或其他内容...
  • 转到菜单:

Find > Find Results - Apply Changes
  • 这将把所有更改写回文件,并自动保存修改后的文件。

  • 默认情况下,使用菜单是唯一的使其工作的方法。然而,使用菜单相当繁琐,而且不能像使用键盘快捷键那样节省时间。您可以通过在以下位置添加新行来设置所选的键盘快捷键

    Preferences > Key Bindings - User
    

    通过添加:

    { "keys": ["ctrl+r"], "command": "find_results_apply_changes" },
    

    不要使用CTRL+S,因为它会覆盖保存文件的快捷键。

    警告!:根据插件作者的说法:

    使用区域允许您进行多行更改,但如果提交多次,并且在插入新换行符时,将会破坏文件。这是因为新换行符会使行号发生变化。如果在修改过的文件的其他实例中添加/删除换行符,例如在另一个选项卡中,也将“破坏”文件。为了防止这种情况的发生,本包将提醒您并防止大部分此类操作。

    (这是从查找结果应用更改 Github 页面的描述经过修改后的版本。)


    感谢您提供详细的答案。非常感激。 - Ganesh RJ
    谢谢,但这让我无法在查找结果中使用双击导航。 - Bondolin
    一个好的插件被作者的偏见所毁。请查看他们的WONTFIX部分以获取详细信息。在Windows上(或任何行结尾与Unix行结尾不同的系统上),实际上无法使用。 - Mrchief
    不在ST3上?这让我很失望。 - Unknow0059

    2
    我能想到的最简单的解决方法是,通过双击路径打开目标文件,然后在Windows上使用Ctrl+G或在Mac OS上使用+G跳转到相应的行。这是我做的方式,即使没有插件,也只需要几秒钟就能完成。

    1
    是的,但是想象一下有一个带有搜索结果文件或类似文件的“搜索和替换”选项,当你需要在100个文件中更改某些内容时。 - Adam Pietrasiak
    3
    如果你想在这100个文件中更改相同的字符串,你可以使用“替换文件中的内容”而不是“查找文件中的内容”选项(在屏幕右下角按“Command+Shift+F”)。 - chrisg86

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接