在Vim中使用AStyle

rcv*_*rcv 7 vim formatting coding-style

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

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

我知道我总是可以一次重新格式化整个文件,但有没有办法在vim中使用astyle,它完全复制了vim的原始格式化行为(所有我的=运动命令都工作 - 以及使用astyle的autoindent的奖励积分! )?

idb*_*rii 3

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

我不确定你如何通过动作来做到这一点。

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

vnoremap = <Esc>`<dwgv=`<<C-v>`>I<C-r>"<Esc>
Run Code Online (Sandbox Code Playgroud)

分解一下:

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
Run Code Online (Sandbox Code Playgroud)

也许你可以用动作做类似的事情?