在Vim中缩进整个文件而不离开当前光标位置

时间:2011-08-16 23:38:31

标签: vim indentation vi

我已经知道gg=G可以在Vim上缩进整个文件。但这会让我在缩进后转到文件的开头。如何缩进整个文件并将光标保持在同一位置?

5 个答案:

答案 0 :(得分:14)

请参阅:h ''

这会让你回到你开始的第一个字符:

gg=G''

这将使您返回起始行起始栏:

gg=G``

我认为带有反引号的第二个版本就是你想要的版本。在实践中,我通常只使用双撇号版本,因为我的键盘很难访问反引号。

答案 1 :(得分:2)

将此添加到.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>

您也可以在任何其他命令上使用它,只需将参数更改为保留功能即可。从这里获取的想法:http://vimcasts.org/episodes/tidying-whitespace/

答案 2 :(得分:1)

您可以使用m命令后跟字母为当前位置设置书签。然后在运行indent命令后,可以使用`(反引号)命令返回该书签,后跟同一个字母。

答案 3 :(得分:0)

与Alex的回答类似,我在vimrc中使用以下映射。

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

在正常模式下按g=整个缓冲区缩进,并保留滚动/光标位置。

答案 4 :(得分:0)

Herbert的解决方案之上,读者还可以使用<C-o>

在vim脚本中

exe "norm! gg=G\<C-o>"

或映射

:nnoremap <F10> gg=G\<C-o>