将代码注入多个文件中的唯一函数(Sublime编辑器)

时间:2014-08-15 07:17:41

标签: string text replace inject

根据Xaelias的建议我会修改这篇文章,因为最初的问题很不清楚并且过于复杂。

所以基本上我有多个需要编辑的脚本文件(其中太多可以手动编辑)。我需要为每个脚本文件做的是在每个脚本文件中的特定位置插入某个代码。

因此,如果我的脚本文件名为foo.script,并且其中的代码如下:

cut_bar() {
    some code...
}

cut_cabbage() {
   some code...
}

...

然后我希望foo.script文件的最终外观如下:

cut_bar() {
    some code...
    message msg_foo_bar
}

cut_cabbage() {
    some code...
    message msg_foo_cabbage

...

cut _ 是所有需要添加代码的所有函数共享的通用前缀。)

有没有办法在Sublime Text编辑器中执行此操作?或者除了开发一个完成所有这些工作的小程序之外别无他法(在这种情况下,提示也会受到赞赏!)。

1 个答案:

答案 0 :(得分:0)

我们会尝试第一个解决方案,这个解决方案远非完美,但可能足以满足您的需求。如果它不起作用,我们将尝试另一种解决方案。

您想要搜索并替换(⌥⌘F(在Mac上)或Find→Replace...)。

  • 确保RegEx修改器处于活动状态(左侧为.*
  • 查找内容:(?<=^cut_)(.*?)(\(\)\h*\{(?:.|\v)*?)(^\}\h*$)(以下说明)
  • 替换为:\1\2\tmsg_foo_\1\n\3

如果它不按预期工作,我们可能只需稍微调整一下RegEx即可。或者我们可能需要使用python和ST插件!

RegEx说明:

  • (?<=^cut_):我们希望我们的匹配从一行(^)的开头开始cut_这不会被捕获,因为如你所说,这是一个常数,所以我们真的不在乎
  • (.*?):这与方法名称的其余部分匹配。这已被捕获,将为\1
  • (\(\)\h*\{(?:.|\v)*?):我们停止()处的名称捕获,\h用于可能位于名称末尾和{{1}之间的任何水平空格(空格或制表符)然后我们匹配每个字符和{(垂直空格,例如新行)(这被捕获为\v
  • \2:......直到我们遇到以(^\}\h*$)开头的行,并且在行结束前可能有任何类型的水平空格(}),这被捕获为$

从那里,替换部件我觉得很简单。
\3是我们捕获但不想修改的所有内容(方法的名称及其正文,除了最后一行\1\2\
然后我们将您想要的内容}放到msg_foo_\1,例如,然后放回结尾msg_foo_bar