如何在vim中查找和替换类似的东西?

时间:2019-01-24 09:12:13

标签: regex search vim

输入

if(statement)
{

到Ouput

if ( statement ) {

我可以使用

找到输入
/if(\S\(.*\))

说明:

if(是要搜索的关键字,\ S消除空格,(。*)中和之间的任何内容)。

需要:

尝试通过不带编码准则的代码使编码准则自动化,而且我是一个懒惰的编码人员,想运行autocmd来编写编码准则。

编辑:

:%s/if(\S\(.*\)\S)/if ( \1 )/gc

非常接近,但是会删除'if('之后的第一个字符,以及')'之前的最后一个字符

3 个答案:

答案 0 :(得分:0)

:%s/if(\(\S.*\S\))/if ( \1 )/gc

\ 1是用于替换()之间的第一个匹配模式,因此在我的情况下为\ S。* \ S

\ S。* \ S适用于任何没有空格的东西。

答案 1 :(得分:0)

这里不需要:substitute;您已经有了正则表达式,可以将其与:global一起使用以查找所有行,然后:join与下一行一起使用:

:global /if(\S\(.*\))/join

如果您更喜欢:substitute,则也可以通过匹配换行符(\n),任何缩进和开头卷曲来实现。我在这里使用\zs限制匹配;这使我不必使用捕获组

:%substitute/if(\S\(.*\)\zs\n\s*{/ {/

注意!注意事项

您说您的意图是自动化编码准则。尽管上述的Vim命令适合偶尔进行战术编辑,但我不会将自动工具(可能未经人工检查)基于正则表达式,因为它们只能 approximate 编程语言。 Vim的语法突出显示很好,在这种情况下,您可能会遇到偶尔的错误表示。直接在源代码本身上工作是不同的。为此,有更好的工具可以直接实现语言的语法规则(通常不通过正则表达式,而是经过全面测试的解析器)。您没有提到语言,但是快速搜索«language»linter «language»代码样式检查应该会为您提供一些开始。

答案 2 :(得分:0)

尝试以下vim自动化表达式:

:%s/\vif\((.*)\)/if ( \1 )/gc