gpt4 book ai didi

Vim - 复制每行的第 N 个字,从第 10-100 行到行尾

转载 作者:行者123 更新时间:2023-12-04 06:44:02 27 4
gpt4 key购买 nike

我有一个 Java 类

public class Constants{
public static final MyClass field1 = new MyClass("arg1"); // line 10
public static final MyClass field2 = new MyClass("arg2");
...
public static final MyClass field101 = new MyClass("arg101"); //line 100
}

我希望将每行的第 5 个单词附加为 MyClass 的构造函数的第二个参数 As:

public class Constants{
public static final MyClass field1 = new MyClass("arg1", "field1"); // line 10
public static final MyClass field2 = new MyClass("arg2", "field2");
...
public static final MyClass field101 = new MyClass("arg101", "field101"); //line 100
}

为简化起见,我们不关心每行末尾的 ");。如何用 vim 命令将第 10 行到第 100 行的第 5 个单词放到每行的末尾?

最佳答案

试试这个:

:10,100s/\v^%(\s*\w+){4}\s+(\w+).*\zs\ze\)/, "\1"/

编辑:拼写出来:

  • :10,100 - 适用于第 10 -- 100 行
  • s/.../.../ - 替换
  • \v - 将 regexp 语法更改为“非常神奇”,因此我们可以编写 %(...){...} code> 和 + 而不是 \%(...\)\{...}\+
  • ^ - 行首的 anchor
  • %(...) - 非捕获组;与 (...) 相同,只是它不创建反向引用(也就是说,它不向 \1\2< 添加任何内容, ..., \N)
  • \s*\w+ - 空格 + 单词
  • {4} - 重复最后一项 4 次;也就是说,跳过前四个词
  • \s+ - 跳过空格
  • (\w+) - 捕获 \1
  • 中的下一个单词
  • .* ...\) - 跳到最后一个括号; ) 变成 \) 因为 \v
  • \zs - 从这里开始替换;匹配所有内容,但只替换 \zs
  • 右边的部分
  • \ze - 在这里结束替换;匹配所有内容,但只替换 \ze
  • 左边的部分
  • /, "\1"/ - 插入 , "foo"; \1 来自 (\w+),因为我们有 \zs\ze 彼此相邻,效果是用 , "foo" 替换那一点的空字符串。

关于Vim - 复制每行的第 N 个字,从第 10-100 行到行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29340158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com