有没有办法用Vim自动重新格式化括号?

Xav*_* T. 4 vim formatting

我想重新格式化一些看起来像这样的代码:

if (cond) {
  foo;
}
Run Code Online (Sandbox Code Playgroud)

if (cond)
{
  foo;
} 
Run Code Online (Sandbox Code Playgroud)

由于这是C代码,我一直在寻找cindent/ cinoptions使用,=但它似乎不处理多线规则.

我一直在寻找formatoptions使用gq,它似乎也不可能.

那么可以使用默认的Vim选项,还是应该使用特定的插件或功能?

sou*_*rge 5

我不知道这是否完全解决了你的问题,但如果这是一次性操作,你可能想尝试正则表达式:

:%s/^\(\s*\)\(.*)\)\s*{\s*$/\1\2^M\1{/
Run Code Online (Sandbox Code Playgroud)

请注意,这^M是一个通常按下CTRL-V后面生成的控制字符(取决于您的终端)ENTER.

编辑:正如Jay和Zyx的评论所指出的,\r是一种更换插入换行字符串的更好方法.我没有意识到这一点,非常感谢提示.


Jay*_*Jay 5

:%s/^\(\s*\).*\zs{\s*$/\r\1{/
Run Code Online (Sandbox Code Playgroud)

分解:

^\(\s*\) =捕获行开头的空格

.* =其他一切

\zs =此后开始更换

{ =打开大括号

\s*$ =在行结束前尾随空格

\r\1{ =换行符,捕获的空格,大括号