结构搜索和替换
最后修改时间:2023 年 9 月 7 日传统的搜索过程不考虑源代码的语法和语义。即使您使用正则表达式,IntelliJ IDEA 仍然会将您的代码视为常规文本。结构搜索和替换( SSR ) 操作允许您根据代码结构搜索代码中的特定代码模式或语法结构。
IntelliJ IDEA 根据您创建的搜索模板和应用的条件查找并替换源代码片段。
笔记
目前,IntelliJ IDEA 支持 Java、Kotlin 和 Groovy 的结构搜索和替换。
从结构上寻找目标
转到编辑 | 查找| 结构搜索以打开“结构搜索”对话框。
笔记
在“结构搜索”对话框中,您可以快速切换到“结构替换”对话框。点击。
在“结构搜索”对话框中,执行以下操作之一:
从头开始创建您自己的模板。
从模板列表中选择草稿模板。
在编辑器区域中,输入代码模板(
$variable$
代表您的代码),在对话框的工具栏中单击以保存它以供将来使用。您也可以选择将模板保存为检查。IntelliJ IDEA 将创建的模板添加到现有模板列表(最近的节点)。
使用现有模板之一作为原型。
在可用的现有模板列表中,选择所需的模板。
例如,您的代码中有以下字段:
public class MainActivity { public static final String this_is_wrong = "Hello"; public static final String THIS_IS_CORRECT = "world"; }
让我们在类中查找某个字段。
在现有模板列表中,单击“Java”并打开“基于类”节点(因为我们需要类中的字段),因此类模板的字段将是我们的目标。
单击“查找”。
IntelliJ IDEA 会立即突出显示编辑器中找到的代码。
“结构搜索”对话框显示选定的模板以及模板中使用的过滤器的值。您可以编辑现有的过滤器或添加新的条件,例如添加一些正则表达式或脚本约束。将插入符号放在代码变量处并使用过滤器区域来管理过滤器。
作为示例,我们为
$Field$
变量添加一个条件。在过滤区域中,单击添加新条件。例如,如果您需要添加正则表达式,请选择Text。您还可以根据变量添加其他条件。
在打开的字段中,输入您的条件。
例如,让我们输入以下正则表达式:
\b[A-Z].*?\b
在这种情况下,当您在“结构搜索”对话框中选择“匹配大小写”复选框时,IntelliJ IDEA 将仅搜索包含大写字符的字段。
另请注意,根据所选语言,有不同的附加选项可用。
例如,检查以下选项:
语言:使用列表选择哪些文件类型应成为搜索的一部分。在我们的例子中,它是Java。
目标:在选项列表中,选择要搜索的项目。在我们的例子中是
Field
)。Recursive:如果选中此复选框,IntelliJ IDEA 会执行递归搜索,所有嵌套项都将包含在结果中。例如,当您搜索方法调用时,启用“递归”选项后,IntelliJ IDEA 将在
foo(foo(foo()))
. 禁用“递归”选项后,将仅找到外部方法调用。注入代码:如果选中此复选框,则注入代码(例如 HTML 代码中注入的 JavaScript 或 Java 中注入的 SQL)将成为搜索过程的一部分。
区分大小写:如果选中此复选框,搜索结果将匹配搜索目标的大小写。
指定搜索位置:在项目、模块、目录中或自定义范围内。
单击“查找”。
IntelliJ IDEA 在“查找”工具窗口中显示结果。
您可以通过单击“查找”工具窗口中的从模板创建检查,将新创建的搜索模板作为自定义模板添加到结构搜索检查中,并在以后使用它来检查您的代码。
笔记
在某些情况下,您可以使用检查来代替结构搜索和替换。例如,通过结构搜索将类替换为接口不会改变用法,并且需要执行多次搜索和替换。在这种情况下,您可以使用抽象类进行接口检查,这也会修改抽象类的用法。
从结构上替换目标
转到编辑 | 查找| 结构上替换。
如果您需要在替换模板中为变量添加过滤器,请在感兴趣的变量处放置插入符号,并使用过滤器区域来管理过滤器。
在过滤器区域中,根据您选择的过滤器,指定条件。
例如,让我们获取一个
$Field$
我们搜索的变量,并添加一个条件以将找到的模板替换为小写字符。让我们调用我们的变量
$Field2$
并添加以下过滤器脚本,它基本上是一个 Groovy 脚本Field.name.toLowerCase()
:要缩小替换结果范围,请选择以下选项:
缩短完全限定名称- 用短名称和导入替换完全限定类名称。
重新格式化- 自动格式化替换的代码。
使用静态导入- 尽可能使用静态导入进行替换。例如,如果选择此选项,
Math.abs(i)
则将变为对静态方法的方法调用。abs(i)
指定必要的选项后,单击“查找”。IntelliJ IDEA 在“查找”工具窗口中显示结果。
在“查找”工具窗口中,您可以进一步处理结果,逐一替换找到的项目,或一次替换所有项目,或者预览潜在的更改。
您还可以将替换模板添加到结构搜索检查中,并将其用作代码的快速修复。
由于我们的替换,大写字符被切换为小写。
共享搜索模板
您可以通过导出或导入搜索模板与同事共享。
在“结构搜索”对话框(“编辑”|“查找”|“结构搜索”)中,创建一个新的搜索模板或使用现有的模板。
要导出模板,请单击。IntelliJ IDEA 将模板的 XML 表示形式添加到剪贴板(按可查看剪贴板的内容)。您可以通过聊天、电子邮件或论坛与其他开发人员共享此表示。CtrlShift0V
要导入模板,请从任何地方(电子邮件、聊天或论坛)复制 ( ) 共享 XML 代码,然后在“结构搜索”对话框中单击。IntelliJ IDEA 采用 XML 代码表示并将其转换为包含变量和范围(如果存在)的模板。Ctrl0C
感谢您的反馈意见!