如何在Vim中自动补全并格式化括号?Java开发场景
搞定Vim里Java大括号的自动补全与层级缩进
嘿,我太懂你学Java时反复敲大括号的痛苦了!作为Vim用户,我之前也踩过类似的坑,来给你好好梳理下:
首先你说普通的inoremap没效果,这很正常——全局的inoremap很容易被Vim的默认映射或者你可能装的插件给覆盖掉。而你用autocmd FileType java配合<buffer>的写法,相当于只在Java文件里激活这个映射,优先级更高,所以能正常工作,这步你选对方向啦!
不过你提到当前配置只在最高层级生效,应该是指嵌套大括号(比如方法里的代码块、if语句里的块)的时候,缩进不对对吧?原来的{<CR><CR>}<Up><Tab>逻辑太固定了,只会加一层缩进,没法识别当前的嵌套层级。
给你优化一下配置,让它能智能适配不同的缩进层级:
autocmd FileType java inoremap <buffer> { {<CR>}<C-o>k<Tab>
给你拆解下这个映射的逻辑:
- 输入
{后,先把{打出来 - 按
<CR>换行到下一行 - 插入闭合的
},然后用<C-o>k临时退出插入模式回到上一行(之后会自动切回插入模式) - 最后按
<Tab>,Vim会根据Java文件的默认缩进规则,自动匹配当前的层级缩进——不管你是在类里、方法里还是if语句里,缩进都能准确对应
要是你想更省心,还可以试试这个更简洁的版本,效果差不多:
autocmd FileType java inoremap <buffer> { <CR>{<CR>}<C-o>O<Tab>
另外给你个小技巧:每次修改.vimrc后不用重启Vim,直接在Vim里输入:source ~/.vimrc就能加载新配置,马上就能试效果!
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

