vim搜索并替换变量字符串

时间:2014-04-30 03:24:22

标签: regex vim replace

我有这样的模式。

func(a, "a");
func(b, "b");
func(abc, "abc");
...

我希望用

替换它们
func(a);
func(b);
func(abc);
...

在vim中,我该怎么做?

4 个答案:

答案 0 :(得分:1)

这可能有用,但在我们可以看到更多输入之前无法肯定:

%s/\v(.*), .*(\);)/\1\2/

尝试这个替代:

:%s/, ".\{-}"//

说明:

% - 在整个文件上运行

, " - 匹配逗号首先引用字面

.\{-}" - 在"

之前尽可能少地匹配零个或多个字符

// - 替换匹配的模式。

答案 1 :(得分:1)

这应该这样做。

:%s/func(\([^,]*\),\s*"\1"/func(\1/g

答案 2 :(得分:0)

如果您想要对线进行批量编辑,可以使用正则表达式完成。请按照以下步骤操作:

  1. 将光标放在顶行。
  2. Shift-V开始线视觉选择。
  3. 将光标移动到底行以选择要修改的所有行。
  4. 输入“:”,您会看到“:'<,'>”出现在底部。
  5. 键入“s /,”。*“); /); /”然后按Enter键。线条会改变。
  6. 在#5上,它是一个正则表达式搜索和替换。 “s”表示操作,然后是匹配模式,然后用什么来替换它。所有这些都由它们之间的/键和最后一个键分隔。

    如果您想了解更多信息,可以在此处找到:http://vimregex.com/

答案 3 :(得分:0)

如果像我一样,您想弄清楚如何在保留一些子字符串的同时进行搜索和替换,您可以使用捕获组

R Sahusolution 使用捕获组,但由于我不知道它们叫什么,所以无法查找。

这是捕获组的另一个示例:

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 替换每个找到的实例,而不仅仅是第一个