2010-12-16 47 views
4

我想重新格式化一些代码,看起来像这样:有没有办法用Vim自动重新设置大括号?

if (cond) { 
    foo; 
} 

if (cond) 
{ 
    foo; 
} 

由于这是C代码,我一直在寻找cindent/cinoptions=使用,但它似乎它不涉及多行规则。

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

那么有可能使用默认的Vim选项,或者我应该使用特定的插件还是函数?

回答

4
:%s/^\(\s*\).*\zs{\s*$/\r\1{/ 

击穿:

^\(\s*\) =捕捉空白在该行的开头

.* =一切

\zs =这个

{ =左大后开始更换大括号

\s*$ =尾随线年底

\r\1{ =换行,抓获空白,撑

+0

这一个运作良好! – user1027562 2012-10-10 10:14:12

5

我不知道这是否能够彻底解决您的问题,但如果这是一个一次性的操作,你可能会想尝试的正则表达式:

:%s/^\(\s*\)\(.*)\)\s*{\s*$/\1\2^M\1{/ 

注意^M是为控制字符通常通过按CTRL-V然后ENTER生成(取决于您的终端)。

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

+1

为什么使用'^ M'?那么'\ r'呢? – Jay 2010-12-16 16:58:26

+0

它确实有效,但如果可以通过现有的选项访问,我会首选。我仍然可以使用你的正则表达式在用户定义的函数映射到 +的东西。如果没有其他解决方案,我会接受你的答案。无论如何感谢您的输入! – 2010-12-16 17:02:16

+0

@Jay:因为这不适用于我正在开发的* all *机器上,但如果您只在MacOS上工作,那么这是个不错的选择。 – soulmerge 2010-12-16 17:31:21

1

我不知道你是否可以在vim中完成它,但是你可以尝试使用BSD indent命令和-bl选项。当光标在第一个{上时,您可以输入indent -bl输入

+0

+1简单和高可用性 – sehe 2011-04-25 21:01:04

4

之前空格如果安装Artistic Style,你可以这样做:

:set formatprg=astyle\ -b 

然后使用gq重新格式化的块码。强调如果您想要启用此功能后,每次你编辑C文件, 你可以添加以下到您的.vimrc文件文本

autocmd BufNewFile,BufRead *.c set formatprg=astyle\ -b 
+1

我建议用'FileType c'替换'BufNewFile,BufRead * .c'。甚至把它放到'〜/ .vim/ftplugin/c.vim'中。 – ZyX 2010-12-16 17:51:44

+0

良好的通话,但为什么'ftplugin' vs'/ ftplugin'后? – Thedward 2010-12-17 18:36:00

相关问题