我可以修复 Vim 中的 Groovy 缩进吗?

Can I fix Groovy indenting in Vim?

我正在尝试将 Vim 用于工作中的某些 Groovy 代码。当不使用分号时,它似乎不能很好地处理自动缩进。我发现了一些与 Ruby 和 JavaScript 相关的问题,但我发现 none 的修复对我有用。我的 .vimrc 中确实有 filetype plugin indent on,并且没有设置 cindentautoindentsmartindent。我已经在 Groovy 缓冲区中尝试 运行 setlocal nocindent nosmartindent 并使用 ggVG= 重新缩进文件,以防万一有一个插件在幕后设置它们,它仍然总是得到它错了。

例如,我在一个小样本上得到了这个(来自我在 Groovy 中编写的个人 libGDX 沙盒应用程序)

@Override
    void render () {
        Gdx.gl.glClearColor(0.75f, 0.75f, 0.75f, 1)
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
            batch.begin()
            batch.draw(img, 0, 0)
            font.draw(batch, "Testing", 300, 400)
            batch.end()
    }

注意注释、左大括号和函数的第一行之后的额外缩进。我的 .vimrc 相当复杂,但如果有人认为这有帮助,我可以 post 一个 link 到我的点文件。

Vim 没有附带 groovy 的缩进脚本。所以它尝试使用基于 C 的标准缩进规则。这些规则使用分号来确定一行是否结束,这就是为什么你在函数的第二行得到行继续缩进的原因。

由于 vim 不包含缩进脚本,您可以使用 groovyindent 插件。放置在 ~/.vim/indent。您还需要 运行 dos2unix on groovy.vim 因为它包含错误的行结尾。

由于 groovy 看起来非常像简化的 perl,对于我的小 groovy(实际上是 nextflow DSL)编码,设置 filetype=perl 后跟 gg=G 效果很好。