【问题标题】:using regex to replace unknown text使用正则表达式替换未知文本
【发布时间】:2022-08-19 23:11:21
【问题描述】:

说我有以下代码

int func1(int a);
int func2(int a);
int func3(int a);

使用vim搜索和替换,我想把它变成这个

/* This function handles action 1*/
int func1(int a);
/* This function handles action 2 */
int func2(int a);
/* This function handles action 3 */
int func2(int a);

搜索每个功能很简单,我可以简单地这样做 /int func. 但是,我不知道如何使用 .在替换部分。如何实现?

  • 没用过vim,不就是JS语法吗? /match/replacement/?
  • 但问题是匹配包含未知字符,替换也必须知道它们
  • (1)为什么要添加明显多余的cmets? (2) 你试过捕获+$0/$1/%0/%1吗?
  • @LMD 这个问题专门针对 Vim 的正则表达式方言。

标签: regex vim


【解决方案1】:

您将使用俗称的“捕获组”(尽管 Vim 并没有真正为该机制命名)。

在 Vim 中,您可以通过用转义括号将要捕获的内容包装起来来定义捕获组:

:%s/foo\(what you want to capture\)bar/what you want to capturebaz
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

并且您将其与 1-9 范围内的转义数字一起使用,该数字对应于模式中捕获组的位置:

:%s/foo\(what you want to capture\)bar/\1baz
                                       ^^

:h \(

在这种特定情况下:

:%s/int func\(.\)/\/* This function handles action \1*\/\r\0

我们甚至使用引用整个模式的\0

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 2014-03-11
    • 1970-01-01
    • 2017-01-21
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多