Neovim:Java文件多行条件if语句的闭合大括号如何与if对齐?
Java文件中cindent缩进配置问题及解决方法
我在Java文件中启用cindent(执行:set ft=java),想配置出符合预期的缩进格式,但一直没找到合适的方案:
预期格式需求
对于带有多行条件的if语句,希望实现如下格式:
if (x && y && z) { do abc; }
要求{与条件保持在同一行,}与if关键字对齐。
同时希望代码大括号遵循Linux内核编码风格:普通语句的{与语句在同一行,函数声明的{单独放在下一行。
当前遇到的问题
设置cindent且cinoptions为空时,实际得到的格式如下:
if (x && y && z) { do abc; }
此时}会和条件的最后一个字符对齐,换成smartindent后结果完全一致。
我还发现,将文件类型设为c时,即使禁用所有LSP,缩进也能符合预期,推测是Java文件类型相关的缩进设置导致了问题。
问题根源及解决方法
后来确认问题源于Java的特定缩进逻辑:开启filetype indent on后,会自动设置indentexpr=getJavaIndent(),该配置会干扰cindent的正常工作。
我通过在init.lua中添加自动命令,强制清空indentexpr,让Java文件正常使用cindent,解决了问题:
vim.api.nvim_create_autocmd('FileType', { desc = '关闭indentexpr,强制Java文件使用cindent', pattern = {'*java'}, group = vim.api.nvim_create_augroup('java-clear-indentexpr', { clear = true }), callback = function() vim.bo.indentexpr = "" end })
内容的提问来源于stack exchange,提问作者b4r4t1mo
相关产品推荐
相关产品推荐

