我有一个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
的构造函数的第二个参数附加为:
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行到每行的末尾?
答案 0 :(得分:2)
:10,100normal! 0f=byiwf)i, "<C-v><C-r>""<CR>
英文:
10
行,100
,=
,, "
。当然,整个过程可以用录音来完成:
"
答案 1 :(得分:2)
试试这个:
:10,100s/\v^%(\s*\w+){4}\s+(\w+).*\zs\ze\)/, "\1"/
编辑:拼写出来:
:10,100
- 适用于10 - 100行s/.../.../
- 替换\v
- 将正则表达式语法更改为&#34;非常神奇&#34;,因此我们可以编写%(...)
,{...}
和+
而不是{{1 }},\%(...\)
和\{...}
\+
- 在行首^
- 非捕获组;与%(...)
相同,但它不会创建反向引用(也就是说,它不会向(...)
添加任何内容,\1
,...,{{1 }})\2
- 空格+字\N
- 重复最后一项4次;也就是说,跳过前四个单词\s*\w+
- 跳过空格{4}
- 捕获\s+
(\w+)
- 跳到最后一个括号;由于\1
.* ... \)
变为)
\)
- 开始替换;匹配所有内容,但只替换\v
\zs
- 结束替换此处;匹配所有内容,但只替换\zs
\ze
- 插入\ze
; /, "\1"/
来自, "foo"
,由于我们彼此相邻\1
和(\w+)
,效果是用\zs
替换此时的空字符串