在Vim中使用AStyle

在Vim中使用AStyle,vim,formatting,coding-style,Vim,Formatting,Coding Style,我试图让AStyle使用Vim,这样我就可以使用“=”键重新缩进代码的各个部分。例如,我希望能够键入我常用的=iB,使用AStyle而不是内置压头来缩进当前代码块 我尝试在vimrc中设置equalprg=astyle,但问题是astyle只接收选定的块,但认为它接收的是整个文件。因此,当我尝试只缩进嵌套类时,缩进是完全关闭的 我知道我总是可以一次重新格式化整个文件,但是有没有一种方法可以在vim中使用astyle来完全复制vim的原始格式化行为(我所有的=-移动命令都有效-并且使用astyle

我试图让AStyle使用Vim,这样我就可以使用“=”键重新缩进代码的各个部分。例如,我希望能够键入我常用的
=iB
,使用AStyle而不是内置压头来缩进当前代码块

我尝试在vimrc中设置equalprg=astyle,但问题是astyle只接收选定的块,但认为它接收的是整个文件。因此,当我尝试只缩进嵌套类时,缩进是完全关闭的


我知道我总是可以一次重新格式化整个文件,但是有没有一种方法可以在vim中使用astyle来完全复制vim的原始格式化行为(我所有的
=
-移动命令都有效-并且使用astyle进行自动缩进也有额外的好处!)?

除非有一个版本的AStyle具有部分文件格式选项,否则您需要在运行AStyle后应用额外的缩进

我不知道你怎么能用动作做到这一点

通过视觉选择,您可以从第一行获取缩进,将代码传递到equalprg,然后将缩进添加到所有行:

vnoremap = <Esc>`<dwgv=`<<C-v>`>I<C-r>"<Esc>

vnoremap=`它只适用于具有部分文件格式选项的格式化程序,就像idbrii已经指出的那样。执行此操作的格式化程序示例如下


将其集成到vim中的一种方法是使用。使用此插件,您可以
viB
,然后按自定义格式键,如
。这将只格式化所选的内部代码块。

您可能应该使用
'formatprg'
而不是
'equalprg'
,以及
gq
而不是
=
。这对我来说似乎更合适。但这并不能解决你的问题。
vnoremap -- so we can use = for equalprg
<Esc>`< -- stop selecting and go to beginning of line at beginning of selection
dw -- grab the initial indentation
gv= -- reselect and indent as normal
`<<C-v>`> -- block select the selection
I<C-r>"<Esc> -- insert the initial indentation