在Vim中缩进整个文件而不离开当前光标位置
我已经知道,在Vim中缩进整个文件而不离开当前光标位置,vim,indentation,vi,Vim,Indentation,Vi,我已经知道,gg=G可以在Vim上缩进整个文件。但这将使我在缩进后转到文件的开头。如何缩进整个文件并将光标保持在同一位置?您可以使用m命令和字母为当前位置设置书签。然后在运行indent命令后,您可以使用`(backtick)命令返回到该书签,该命令后跟相同的字母 将此添加到您的.vimrc function! Preserve(command) " Preparation: save last search, and cursor position. let _s=@/ let l
gg=G
可以在Vim上缩进整个文件。但这将使我在缩进后转到文件的开头。如何缩进整个文件并将光标保持在同一位置?您可以使用m命令和字母为当前位置设置书签。然后在运行indent命令后,您可以使用`(backtick)命令返回到该书签,该命令后跟相同的字母 将此添加到您的.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>
函数!保存(命令)
准备:保存上次搜索和光标位置。
让我们=@/
设l=直线(“.”)
设c=col(“.”)
“开展业务:
执行:命令
清理:恢复以前的搜索历史记录和光标位置
让我们
调用游标(l,c)
端功能
nmap>:调用保留(“正常gg>G”)
您也可以在任何其他需要的命令上使用此命令,只需将参数更改为preserve函数即可。其思想如下:请参见:h'
这将使您返回开始行的第一个字符:
gg=G''
这会让你回到起点和起点栏:
gg=G``
我假设第二个版本是你想要的,带有背景符号。实际上,我通常只使用双撇号版本,因为背景符号在我的键盘上很难访问。与Alex的回答类似,我在vimrc中使用了以下映射
nnoremap g=:让b:PlugView=winsaveview()gg=g:调用winrestview(b:PlugView):回显“文件缩进”
在正常模式下按g=
,整个缓冲区缩进,滚动/光标位置保持不变。在解决方案的顶部,读者也可以使用
在vim脚本中
exe "norm! gg=G\<C-o>"
exe”规范!gg=G\”
或映射
:nnoremap <F10> gg=G\<C-o>
:nnoremap gg=G\
zz太棒了。第二个版本就是我要找的。唯一的缺点是当前行将位于屏幕的末尾。太好了。如果您想在屏幕中间重新定位行,请尝试添加一个zz
:保持屏幕不变的gg=G``zz
:mqHmwgg=G`wzt`q。注意它使用q
>和w
标记。用let w=winsaveview()
替换开头的所有let,用call winrestview(w)
替换结尾的let和call,甚至恢复滚动位置。