Formatting 有没有办法用Vim自动重新格式化大括号?
我想重新格式化一些代码,如下所示:Formatting 有没有办法用Vim自动重新格式化大括号?,formatting,vim,Formatting,Vim,我想重新格式化一些代码,如下所示: if (cond) { foo; } 到 因为这是C代码,所以我一直在研究cindent/cinoptions以与=一起使用,但它似乎不处理多行规则 我一直在研究formatoptions与gq一起使用,但似乎也不可能 那么,是否可以使用默认的Vim选项,或者我应该使用特定的插件或函数?我不知道这是否完全解决了您的问题,但如果这是一次性操作,您可能希望尝试正则表达式: :%s/^\(\s*\)\(.*)\)\s*{\s*$/\1\2^M\1{/ 请注意
if (cond) {
foo;
}
到
因为这是C代码,所以我一直在研究cindent
/cinoptions
以与=
一起使用,但它似乎不处理多行规则
我一直在研究formatoptions
与gq
一起使用,但似乎也不可能
那么,是否可以使用默认的Vim选项,或者我应该使用特定的插件或函数?我不知道这是否完全解决了您的问题,但如果这是一次性操作,您可能希望尝试正则表达式:
:%s/^\(\s*\)\(.*)\)\s*{\s*$/\1\2^M\1{/
请注意,^M
是一个控制字符,通常通过按CTRL-V和ENTER键生成(取决于您的终端)
EDIT:正如Jay和Zyx在评论中指出的那样,
\r
是在替换的字符串中插入换行符的更好方法。我没有意识到这一点,非常感谢您的提示。我不知道您是否可以在vim本身中执行此操作,但是您可以使用-bl
选项尝试BSDindent
命令。光标位于第一个{
,您可以键入!%%indent-bl
Enter
细分:
^\(\s*\)
=捕获行首的空白
*
=其他所有内容
\zs
=在此之后开始更换
{
=开放式花括号
\s*$
=行结束前的尾随空格
\r\1{
=换行符、捕获的空格、大括号如果安装,可以执行以下操作:
:set formatprg=astyle\ -b
然后使用重新格式化代码块。强调文本
如果希望在每次编辑C文件时启用此选项,
您可以将以下内容添加到.vimrc
文件中
autocmd BufNewFile,BufRead *.c set formatprg=astyle\ -b
为什么要使用
^M
?那\r
呢?它确实有效,但如果可以通过现有选项访问它,我会更愿意。我仍然可以在映射到+某物的用户定义函数中使用您的regexp。如果没有其他解决方案,我将接受您的答案。无论如何,感谢您的输入!@Jay:因为这对所有ma都不起作用我正在研究中文,但如果你只研究MacOS,这是一个很好的选择。@soulmerge。你错了:出于历史原因,\r
在替换中意味着“此时将线一分为二”,而不是\x0D
,如果你不相信我,请参阅:hs/\r
。@Zyx:谢谢你的信息,我不知道。没有必要这么咄咄逼人,尽管如此。@Jay:不知道\r
转换为本机换行符我建议用文件类型c
替换BufNewFile,BufRead*.c
。或者甚至将其放入~/.vim/ftplugin/c.vim
。这很好,但是为什么ftplugin
与after/ftplugin
?
:set formatprg=astyle\ -b
autocmd BufNewFile,BufRead *.c set formatprg=astyle\ -b