结构化搜索和替换
传统的搜索过程不会考虑源代码的语法和语义。 即使您使用正则表达式,DataGrip 仍然将您的代码视为常规文本。 结构化搜索和替换 (SSR )操作允许您根据代码结构在代码中搜索特定的代码模式或语法结构。
DataGrip 根据您创建的 search templates和您应用的 conditions查找和替换源代码片段。
当您运行结构化搜索时,您会查找可能由搜索模板表示的值。 如果搜索模板匹配了源代码的一部分,符合用户定义模板的表达式将被高亮显示。 搜索模板是由文本、变量、过滤器、范围和上下文组成的搜索查询。 通过这些工具,您可以缩小搜索范围并获得更准确的结果。
搜索工具
变量 是一组用美元符号括起来的字符(例如, $tag$ 或 $anyCharactersYouWant$)。 没有过滤器和上下文的变量等同于一个完整的语句。

Filters 是用户定义的变量和搜索模板的条件。 通过使用过滤器,您可以检查变量的出现次数、检查值类型、将变量与纯文本或正则表达式匹配,并应用 Groovy 脚本。 在 搜索模板、修饰符和脚本约束 中查看完整的过滤器列表。
如果我们应用 type 过滤器和 [string] 值,我们将找到 选择 语句中的所有字符串值。 但要在表定义(CREATE TABLE 语句)中找到所有字符串类型,您需要应用 类型 上下文。 要设置上下文,您也需要使用过滤器。 但与变量不同的是,过滤器应用于特定变量,而上下文过滤器应用于整个搜索模板。

上下文 是内置的内部模板,帮助搜索引擎识别变量。 上下文仅用于 SQL,以消除语言歧义。 通过使用上下文,您可以告诉搜索引擎在哪里以及搜索什么变量。 您可以为搜索模板设置以下上下文:
表达式 :一个或多个值、运算符或返回值的 SQL 函数。 使用 表达式 上下文,IDE 将在
SELECT $expression_1$ FROM table_name where $expression_2$这样的结构中查找$expression_1$和$expression_2$。类型 :可以存储在表列中的值类型(例如,
varchar(100))。 使用 类型 上下文,IDE 将在CREATE TABLE table_name (id_1 $type_1$, id_2 $type_2$)这样的结构中查找$type_1$和$type_2$。查询子句 :查询子句,例如
DISTINCT、FROM、WHERE、ORDER BY、GROUP BY或HAVING。 在 查询子句 上下文中,您需要使用带有变量的子句关键字。 例如,IDE 将在select * from table_name $variables$;这样的结构中查找where $variables$。 如果您在WHERE子句中有类似a + b的表达式,您可以像where $variable_1$ + $variable_2$;一样明确指定您的变量。 并将任何变量定义为搜索目标。

搜索目标 是一个列表,您可以在其中指定 IDE 应该搜索模板的哪一部分:单个变量或整个模板。 例如,您可以使用搜索目标,通过 context = query clause 从 where $a$ + $b$ 搜索模板中找到 $b$ 值。

范围 定义了您希望执行搜索的信息来源。 它可以是打开的文件或当前文件、 个文件 工具窗口中的目录 Alt+2 、最近更改的文件以及其他来源。 要在特定目录中搜索,请选择 目录 ,按下 浏览 按钮。

文件类型 定义了您希望搜索的文件方言。

SQL 模板在结构化搜索中的工作原理
让我们看看搜索引擎如何处理搜索模板。 假设您在搜索字段中有 WHERE $a$ 搜索模板,并设置了 context = query clause。
DataGrip 获取 查询子句 上下文模板的定义。 对于 查询子句 上下文模板,其定义为
SELECT id from dummy $pattern$。 您可以在 现有模板 菜单项下查看所有现有的上下文模板。IDE 将
$pattern$变量替换为您在搜索模板中定义的值。 在本例中,它是WHERE $a$。 替换结果将如下所示:SELECT id from dummy WHERE $a$。IDE 解析最终的
选择语句,并在语法树中搜索WHERE $a$。当找到
WHERE $a$时,IDE 会在编辑器中将其高亮显示。
结构化搜索和替换
结构化搜索
点击 。
从 文件类型 列表中,选择您希望在搜索中使用的语言。
在 搜索模板 字段中,输入搜索模板或选择现有模板。
不要选择 节点下的模板,这些模板由搜索引擎内部使用以消除语言歧义。 保存的 SQL 模板位于 节点下。
如果修饰符面板被隐藏,请单击 切换修饰符面板 按钮(
)。
单击每个模板变量并设置搜索修饰符。 要设置修饰符,请单击 添加修饰符 链接。
DataGrip 会在编辑器中即时突出显示所找到的代码。
(仅限 SQL)添加 SQL 上下文。
在 搜索模板 字段中,将光标放在模板的开头并单击 添加修饰符 链接。 从列表中选择 上下文。
(可选)从 范围 列表中选择您希望搜索的位置:项目、模块、目录或自定义范围内。
(可选)从 搜索目标 列表中选择您希望搜索模板的哪一部分:单独的变量或整个模板(完全匹配)。
点击 查找。

结构化替换
在主菜单中,进入 .
在 搜索模板 字段中,输入搜索模板或选择现有模板。
不要选择 节点下的模板,这些模板由搜索引擎内部使用以消除语言歧义。 保存的 SQL 模板位于 节点下。
在 替换模板 字段中,输入搜索模板或选择现有模板。
如果您需要为替换模板中的变量添加修饰符,请将光标放在变量上,并使用修饰符区域来管理修饰符。
点击 查找。 DataGrip 在 查找 工具窗口中显示结果。
在 查找 工具窗口中,您可以进一步处理结果,逐一替换找到的项目、一次性替换所有项目,或预览潜在的更改。

使用搜索模板的操作
保存结构化搜索的模板
点击 。
在 结构化搜索 对话框中,通过使用变量和修饰符添加搜索模式。
变量是一组用美元符号括起来的字符(例如,
$tag$)。 如果源代码表达式符合用户定义的约束(修饰符),模板变量将匹配该表达式。 在搜索过程中绑定到模板变量的任何表达式都可以在搜索或替换模板中再次使用。请点击 保存模板(A)… 按钮
并选择 在IDE 或项目中保存模板…。

共享搜索模板
在 结构化搜索 对话框 中, 创建一个新的搜索模板或使用现有的模板。
要导出模板,请单击 将模板导出到剪贴板 按钮(
)。 DataGrip 将模板的 XML 表示添加到剪贴板(按 Ctrl+Shift+V 以查看剪贴板内容)。 您可以在聊天、电子邮件或论坛中与其他开发者共享此表示形式。
要导入模板,请从任意位置(电子邮件、聊天或论坛)复制(Ctrl+C )共享的 XML 代码,并在 结构搜索 对话框中单击 从剪贴板导入模板 按钮(
)。 DataGrip 获取 XML 代码表示并将其转换为模板,包括变量和范围(如果存在)。