2010-08-11 130 views
461

我最近发现按Ctrl +Ë按Ctrl +Ÿ快捷 Vim的用于分别移动屏幕上下用一条线一步,不移动光标如何在不移动光标的情况下移动屏幕?

您是否知道任何将光标保留在原来位置的命令,但移动屏幕以使光标所在的行成为第一行? (有最后一行的命令会是一个不错的奖励)。

我可以通过手动按压Ctrl键 + ë(或Ctrl键 + ÿ)的次数进行适当的数量,但其具有以某种方式执行此直接将是很好的命令实现这一点。

任何想法?

回答

658
  • žž - 移动当前行至屏幕
    中间 (慎用žž,如果你碰巧有帽上意外地锁定,您将保存并退出vim!)
  • Ž吨 - 移动当前行 到屏幕的顶部
  • Žb - 移动 当前行到 屏幕底部
+9

** zz **天才!非常感谢。 – Costa 2015-01-02 21:23:29

+21

小心* z z * - 如果您碰巧碰巧有_Caps Lock_,您将保存并退出vim! – 2016-08-30 21:13:05

+3

@HappyGreenKidNaps看过很多人在vim中苦苦挣扎,这里的建议比警告更有教育意义;) – 2016-10-06 15:46:06

27

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

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

请注意,如果你只关心去了书签的线,你可以使用'g – 2010-08-11 13:32:06

+1

“Vim要求光标始终处于当前屏幕中”Vim用户喜欢夸耀所有内容都可以在vim中配置。这一个不是。我不想在滚动文件时移动光标。对我来说破产者 – gadelat 2016-05-08 20:11:21

+4

我从来没有遇到过我希望光标位于某处看不到它的情况。当然,光标在你滚动时会四处移动,但你可以回到你平凡的地方(这样你就可以看到你实际在哪里,而不仅仅是猜测)。 Double-back-tick为一个,'Ctrl-O'为另一个非常棒的,而“backtick,句点”则让你回到你上次编辑的位置。 – 2016-06-20 21:55:14

453

另外:

  • 按Ctrl - Ÿ移到屏幕上一行
  • 按Ctrl - Ë移至屏幕下方一行
  • 按Ctrl - ü移动光标&屏幕了半页
  • 按Ctrl - d移动光标&屏幕向下½页
  • 按Ctrl - b移到屏幕翻一页,光标移动到最后一行
  • 按Ctrl - ˚F移动一个页面,光标筛选到第一线

按Ctrl - y and Ctrl - e只更改光标po如果它将被移出屏幕。

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

+4

任何mnenomics记住这一点.. – ulidtko 2013-11-08 21:21:38

+63

@ulidtko:至关重大(后在瑞典),当年(指过去),向上,向下,向后,向前。 (前后两个字比上下长,所以他们自然会将屏幕移动更长的距离;) – Moberg 2013-11-12 11:46:57

+0

@Moberg,真好!谢谢。 – ulidtko 2013-11-12 12:48:38

2

礼貌有时它是有用的以K和J键滚动文本。 所以我在我的这个“滚动模式”功能。的vimrc(也绑定上ZS)

scroll_mode.vim

11

要光标停留在相同的列时使用Ctrl键 + dCtrl键 + ˚FCtrl键 + Ctrl + UGH中号大号克克

你应该定义下列选项:

:set nostartofline 
+0

我每次都忘记/迷惑它: zt/zz/zb - 固定光标并将屏幕移动到** t ** op/center(德语:' ** ** ** entrum')/ ** b ** ottom <---> H/M/L - 固定屏幕并将光标移至** H **高/ ** M **中位/ ** L **低位 – eli 2017-08-10 06:29:04

4

可以加拨号码光标移动命令,这将重复命令很多次

按Ctrl +Ë按Ctrl +Ë时代,而不是一个。

5

这里是我的解决方案中的vimrc:

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 

使光标会停留在屏幕中间,屏幕将上移或下移。

+0

我这个解决方案更多的是OP所需要的。我运用它,它像一个魅力。 – 2017-08-25 20:11:15

+0

只需将'scrolloff'设置为'lines'值的一半即可? – 2017-11-05 17:24:01

2

z输入这个问题的确是这个问题所要求的。

它的工作原理那里奇怪žž是行不通的(VIM 1689年4月7日在Ubuntu LTS 2016.04没有特殊的.vimrc)