Indenting entire file in Vim without leaving current cursor location

孤街醉人 提交于 2019-11-27 18:26:07

问题


I already know that gg=G can indent the entire file on Vim. But this will make me go to the beginning of the file after indent. How can I indent the entire file and maintain the cursor at the same position?


回答1:


See :h ''

This will get you back to the first char on the line you start on:

gg=G''

and this will get you back to the starting line and the starting column:

gg=G``

I assume the second version, with the backtick, is the one you want. In practice I usually just use the double apostrophe version, since the backtick is hard to access on my keyboard.




回答2:


Add this to your .vimrc

function! Preserve(command)
  " Preparation: save last search, and cursor position.
  let _s=@/
  let l = line(".")
  let c = col(".")
  " Do the business:
  execute a:command
  " Clean up: restore previous search history, and cursor position
  let @/=_s
  call cursor(l, c)
endfunction
nmap <leader>> :call Preserve("normal gg>G")<CR>

You can also use this on any other command you want, just change the argument to the preserve function. Idea taken from here: http://vimcasts.org/episodes/tidying-whitespace/




回答3:


You can set a bookmark for the current position with the m command followed by a letter. Then after you run the indent command, you can go back to that bookmark with the ` (backtick) command followed by the same letter.




回答4:


In a similar spirit to Alex's answer I use the following mapping in vimrc.

nnoremap g= :let b:PlugView=winsaveview()<CR>gg=G:call winrestview(b:PlugView) <CR>:echo "file indented"<CR>

by pressing g= in normal mode the whole buffer is indented, and the scroll/cursor position is retained.



来源:https://stackoverflow.com/questions/7086402/indenting-entire-file-in-vim-without-leaving-current-cursor-location

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!