如何在不移动光标的情况下移动屏幕?

我最近发现了Vim的Ctrl + ECtrl + Y快捷键,它们分别以一行一行的方式上下移动屏幕, 而不用移动光标

你知道任何命令离开光标的地方,但移动屏幕,使光标线成为第一行吗? (有最后一行的命令将是一个不错的奖金)。

我可以通过手动按下Ctrl + E (或Ctrl + Y )来达到这个目的,但是有一个命令,直接以某种方式直接进行就好了。

有任何想法吗?

  • z z – 将当前行移动到屏幕中间
    小心z z ,如果碰巧碰巧有Caps Lock ,你会保存并退出vim !)
  • z t – 将当前行移动到屏幕的顶部
  • z b – 将当前行移动到屏幕的底部

另外:

  • Ctrly将屏幕向上移动一行
  • Ctrle将屏幕向下移动一行
  • Ctrlu将光标和屏幕向上移动1/2页
  • Ctrld将光标和屏幕向下移动1/2页
  • Ctrlb将屏幕向上移动一页,光标移至最后一行
  • Ctrlf将屏幕向下移动一页,光标移至第一行

如果CtrlyCtrle将被移出屏幕,则只会改变光标的位置。

感谢http://www.lagmonster.org/docs/vi2.html

Vim要求光标始终处于当前屏幕中,但是,您可以将当前位置添加为书签,然后返回到原来的位置。

 mg # This book marks the current position as g (this can be any letter) <scroll around> `g # return to g 

使用Ctrl + DCtrl + FCtrl + BCtrl + UGHMLg g将光标留在同一列

你应该定义下面的选项:

 :set nostartofline 

你可以用你的光标移动命令作为数字的前缀,并且会多次重复该命令

1 0 Ctrl + E将做Ctrl + E 10次​​而不是一次。

你可能会发现下面这个问题非常有用: 滚动Vim相对于游标,自定义映射 :你可以使用ScrollToPercent(0)从这个问题来做到这一点。

这是我在vimrc中的解决scheme:

 nnoremap k kzz nnoremap j jzz nnoremap p pzz nnoremap P Pzz nnoremap G Gzz nnoremap x xzz inoremap <ESC> <ESC>zz nnoremap <ENTER> <ENTER>zz inoremap <ENTER> <ENTER><ESC>zza nnoremap o o<ESC>zza nnoremap O O<ESC>zza nnoremap a a<ESC>zza 

这样光标将停留在屏幕的中间,屏幕会上下移动。

有时使用K和J键滚动文本是有用的。 所以我有这个“滚动模式”function在我的.vimrc(也绑定在ZS)

scroll_mode.vim

回车确实是这个问题所要求的。

它奇怪的z z不工作的地方(Ubuntu 2016.04 LTS上的vim 7.4.1689,没有特别的.vimrc)