文件中查找-替换的 KDevelop 5.x 文档

文件中查找-替换的 KDevelop 5.x 文档

我正在尝试使用正则表达式在文件中搜索和替换,方法是使用“在文件中查找-替换”对话框开发5.x。我在哪里可以找到这方面的文档?

查找/替换的用户界面与我使用过的其他 IDE(例如 Eclipse)有很大不同:

  • 它没有可以在其中输入正则表达式的搜索文本框,而是有一个模式文本框和一个模板文本框。模板文本框似乎有printf-style 格式选项。
  • 它没有“替换为”文本框,而是有一个“替换模板”文本框,该文本框似乎也有printf- 样式格式选项。

KDevelop 的文档链接链接到KDevelop 维基,这与此无关,除非我错过了。

如果没有文档,相关源代码的链接以及相关部分的摘要就足够了。

在文件中查找替换

答案1

%s 指的是模板和替换模板字段中的两个不同字段。模板字段中的 %s 指的是您在模式字段中键入的字符串。对于“替换模板”字段,它指的是您在“替换文本:”字段中输入的字符串,当您单击搜索按钮时,该字符串将出现在 IDE 底部出现的“在文件中查找/替换”停靠栏中。

您可以在这些领域中创造各种模式。例如,假设您想在文档中将 (vector) 替换为“foobar”。您可以在“模式”字段中键入不带引号的“向量”,在“模板”字段中键入不带引号的“(%s)”,以及在“替换模板”字段中键入不带引号的“[%s]”。点击搜索后,在扩展坞的替换文本字段中输入不带引号的“foobar”,然后点击替换按钮。

编辑:

这里有更多示例/解释。但请注意,我不是 Kdevelop 开发人员,也没有查看过源代码,我只是报告我通过反复试验学到的知识,不幸的是,我对“在文件中查找-替换”功能没有完全了解。

在此输入图像描述

在“查找-替换”对话框(上图)中,我们有以下字段:

  • Pattern:这个字符串就是你要找的。它可以支持正则表达式,但只有Regular expression选中复选框时才有效。
  • Template:用于修饰搜索字符串的正则表达式。 “%s”是对您输入的字符串的引用Pattern。您可以%s多次使用。如果您的Pattern设置为“foo”,则Template“%s%s”模式将扩展为“foofoo”。然后,KDevelop 将搜索与左关联的“foofoo”匹配的文本。我不知道是否还有其他特殊的“%”引用可以使用,并且不需要使用“%s”。该字段的右侧是一个下拉菜单,其中包含您可以使用的各种预定义模板。不知道你能不能定义自己的。
  • Replacement template:用于装饰替换字符串的模式(未启用正则表达式)。值得怀疑的是,KDevelop 团队决定将该Replacement text场放在另一个码头上(见下图)。您在该Replacement text字段中输入的内容就是“%s”将扩展的内容。同样,您可以多次使用“%s”。我不知道是否还有其他特殊的“%”引用可以使用,并且不需要使用“%s”。
  • Regular expression:判断是否Pattern可以使用正则表达式。
  • Case sensitive:切换区分大小写的搜索。
  • Location(s):细化执行查找替换的位置。在右侧,您可以浏览到要运行的特定目录,或从预定义选项的下拉菜单中进行选择。我不确定你是否可以预定义你自己的。
  • Depth:不完全确定这是做什么的,我的猜测是它限制了您的“查找-替换”项目目录的深度。
  • Limit to project files从菜单栏或右键单击菜单访问“在文件中查找/替换”时,此选项似乎永久不活动。这似乎使得过滤文件能够使用下面列出的模式进行搜索Files。我认为这可能是一个错误,您应该能够启用/禁用它。为了切换它,您需要通过“在文件中查找/替换”扩展坞中的放大镜访问“在文件中查找/替换”,请参见图片:在此输入图像描述
  • Files:要运行“查找替换”的文件类型的逗号分隔列表。
  • Exclude:运行查找替换时要忽略的逗号分隔目录列表(相对于项目根目录)和文件。

在上图中,我正在搜索“iomanip”的特定实例。使用该Template模式,它将仅查找被 '<>' 包围且在 'iomanip' 中的 'i' 字符左侧具有可变位数的实例。在 中,Replacement template我输入了一个愚蠢的括号模式,其中包含两个“%s”引用实例。每个“%s”都将扩展为我在 Dock 中的字段中输入的内容,单击“在文件中查找-替换”对话框中的按钮Replacement text后,该 Dock 将出现在 IDE 底部。Search见下图:

在此输入图像描述

如您所见,“在文件中查找/替换”停靠栏将出现在 IDE 底部。在这里,我在字段中输入了“IamTheBest” Replacement text。该字符串是Replacement template上一个对话框中字段 中“%s”扩展后的字符串。

Template树中是与上一个对话框中提供的扩展模式相匹配的命中列表。请注意,<29837489237482374iomanip><iomanip>被击中,但没有被击中"iomanip"。从树中我们可以选择要包含在查找替换协议中的内容。现在我将把它们全部保留为选中状态。在下拉菜单中,您可以从以前的“查找-替换”过程中进行选择。单击Replace按钮后,我们现在将看到:

在此输入图像描述

这里还有更多示例/用例:

  • 演示如何使用多个“%s”: 在此输入图像描述 简而言之,它搜索“foo”的两个实例,左关联,并将它们替换为“Bar”的四个实例,并用各种愚蠢的单词分隔。请注意,第 12 行的单个“foo”和第 11 行的第三个“foo”未更改。
  • 演示了他们的预定义模式之一Template“分配”: 在此输入图像描述 它仅在赋值上下文中将“thisNumber”更改为“零”,但在相等上下文中则不然。

希望这有帮助!

编辑2:

鉴于您如何要求文档或至少源代码的链接,我决定将您链接到源代码。或者更确切地说,KDevelop 团队在 github 上发布的内容:

grep查看源代码

文件中的查找/替换功能封装在上面链接的 grepview 插件中。更具体地说,请查看 greputil.h 和 greputil.cpp。您将在此处找到用于在 和Template字段中扩展“%s”的替换逻辑Replacement template

编辑3:

我对这个选项的陈述Limit to Project Files不准确,我目前正在调查源代码以弄清楚它应该做什么......

编辑4:还没有弄清楚项目的限制,但我刚刚意识到有一个“这是什么?”此查找/替换菜单中的功能(窗口右上角的问号)。如果您单击?然后单击某些字段,它将显示更多有用的信息,特别是在搜索模式字段上。这是“这是什么?”它显示的文本:

如果您不选中下面的“正则表达式”,则这将被视为原始字符串。这意味着所有元字符都会被转义。

可能的元字符有:

。 - 匹配任何字符

^ - 匹配行首

$ - 匹配行尾

\b - 匹配单词边界

\s - 匹配任何空白字符

存在以下重复运算符:

? - 前一项最多匹配一次

* - 前一项匹配零次或多次

+ - 前一项匹配一次或多次

{n} - 前一项精确匹配 n 次

{n,} - 前一项匹配 n 次或多次

{,n} - 前一项最多匹配 n 次

{n,m} - 前面的项至少匹配 n 次,但最多匹配 m 次。

此外,可以通过符号 \n 来反向引用括号内的子表达式。

如需进一步参考,请访问 www.pcre.org 或 man pcresyntax。

相关内容