Vim保存Go文件时自动执行gq且保留光标位置的方法
解决Vim保存Go文件后光标跳转问题
可以通过保存光标位置→执行格式化→恢复光标位置的流程解决,无需插件,直接修改你的autocmd配置即可:
方法一:单行命令写法
将原来的au BufWritePost *.go normal gggqG替换为:
au BufWritePost *.go let save_pos = getpos('.') | normal! gggqG | call setpos('.', save_pos)
let save_pos = getpos('.'):保存当前光标的精确位置(含行、列、缓冲区信息)normal! gggqG:执行全文件格式化,normal!避免用户自定义映射干扰原命令call setpos('.', save_pos):将光标恢复到格式化前的位置
方法二:自定义函数写法(更易维护)
如果需要后续扩展格式化逻辑,可定义专门函数:
function! FormatGoAndRestoreCursor() " 保存光标位置 let save_pos = getpos('.') " 执行全文件格式化 normal! gggqG " 恢复光标位置 call setpos('.', save_pos) endfunction " 绑定到文件保存后事件 au BufWritePost *.go call FormatGoAndRestoreCursor()
可选优化:简化格式化命令
gggqG等价于对整个文件执行格式化,也可以用%gq直接指代整个缓冲区,命令更简洁:
au BufWritePost *.go let save_pos = getpos('.') | execute '%gq' | call setpos('.', save_pos)
以上配置既能保留自动格式化功能,又能确保保存后光标停留在原有位置。
内容的提问来源于stack exchange,提问作者hidetatz
相关产品推荐
相关产品推荐

