我有这样的模式。
func(a, "a");
func(b, "b");
func(abc, "abc");
...
我希望用
替换它们func(a);
func(b);
func(abc);
...
在vim中,我该怎么做?
答案 0 :(得分:1)
这可能有用,但在我们可以看到更多输入之前无法肯定:
%s/\v(.*), .*(\);)/\1\2/
尝试这个替代:
:%s/, ".\{-}"//
说明:
%
- 在整个文件上运行
, "
- 匹配逗号首先引用字面
.\{-}"
- 在"
//
- 替换匹配的模式。
答案 1 :(得分:1)
这应该这样做。
:%s/func(\([^,]*\),\s*"\1"/func(\1/g
答案 2 :(得分:0)
如果您想要对线进行批量编辑,可以使用正则表达式完成。请按照以下步骤操作:
在#5上,它是一个正则表达式搜索和替换。 “s”表示操作,然后是匹配模式,然后用什么来替换它。所有这些都由它们之间的/键和最后一个键分隔。
如果您想了解更多信息,可以在此处找到:http://vimregex.com/
答案 3 :(得分:0)
如果像我一样,您想弄清楚如何在保留一些子字符串的同时进行搜索和替换,您可以使用捕获组
R Sahu 的 solution 使用捕获组,但由于我不知道它们叫什么,所以无法查找。
这是捕获组的另一个示例:
public User updateUser(String username, Optional<String> newUsername, Optional<String> newPassword, Optional<String[]> newRoles) {
// :s/\vOptional\<([a-zA-Z\[\]]*)\>/\1/g
public User updateUser(String username, String newUsername, String newPassword, String[] newRoles)
:s
只搜索一行
\v
假定字母、数字和下划线以外的任何字符都是特殊字符(“非常神奇”模式)
Optional\<
匹配文字短语 'Optional<'
([a-zA-Z\[\]]*)
捕获字母和 [ ] 的组合以供稍后使用
\>
匹配文字短语 '>'
\1
插入第一个捕获的组
g
替换每个找到的实例,而不仅仅是第一个