在Vim中,我可以格式化整个文件并以光标开始的方式结束吗?

Eth*_*han 2 vim

我在.vimrc中设置了这个映射,效果很好......

" Auto indent entire file
nmap <C-f> gg=G
imap <C-f> <ESC>gg=G
Run Code Online (Sandbox Code Playgroud)

但是,在操作之后,光标已移至第1行第1列.

有没有办法做到这一点,如果我在文件的中间某处,光标将保持原样?

a p*_*erd 5

当然,使用marks(:help mark):

nmap <C-f> mtgg=G't
imap <C-f> <ESC><C-f>
Run Code Online (Sandbox Code Playgroud)

在执行之前gg=G,当前光标位置将保存到标记t.操作后,'t跳回标记.

  • 或者更优雅,`:nnoremap <cf> 1G = G \`\``. (2认同)