输入
if(statement)
{
到Ouput
if ( statement ) {
我可以使用
找到输入/if(\S\(.*\))
说明:
if(是要搜索的关键字,\ S消除空格,(。*)中和之间的任何内容)。
需要:
尝试通过不带编码准则的代码使编码准则自动化,而且我是一个懒惰的编码人员,想运行autocmd来编写编码准则。
编辑:
:%s/if(\S\(.*\)\S)/if ( \1 )/gc
非常接近,但是会删除'if('之后的第一个字符,以及')'之前的最后一个字符
答案 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