我正在尝试使AStyle与Vim一起使用,以便可以使用“=”键来重新缩进代码的各个部分。例如,我希望能够输入我通常的=iB来使用AStyle而不是内置的压头来缩进当前代码块。

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

我知道我总是可以立即重新格式化整个文件,但是有一种方法可以在vim中使用astyle来完全复制vim的原始格式化行为(我所有的= -movement命令都可以正常工作-以及使用astyle进行自动缩进的加分点!)?

最佳答案

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

我不确定如何使用 Action 来做到这一点。

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

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

分解:
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

也许您可以对 Action 做类似的事情?

10-07 19:35