关于滚动:如何在Vim中移动光标而不移动屏幕?

How to move screen without moving cursor in Vim?

我最近发现了vim的ctrl+ectrl+y快捷方式,它们分别以一行步骤上下移动屏幕,而不移动光标。

你知道有什么命令会把光标留在原处,但会移动屏幕,使光标所在的行成为第一行吗?(拥有最后一行的命令将是一个不错的奖励)。

我可以通过手动按ctrl+e(或ctrl+y)适当的次数来实现这一点,但是有一个命令以某种方式直接执行这一点会很好。

有什么想法吗?


  • zabbkbdzabbkbd-将当前行移到中间屏幕的(小心zz,如果意外打开Caps LockBkBd,您将保存并退出vim)
  • ZBT-移动当前行到屏幕顶部
  • ZBABBD-移动当前行到屏幕


另外:

  • ctrl y将屏幕向上移动一行
  • ctrl e将屏幕向下移动一行
  • ctrl u是否向上移动光标和屏幕?页
  • ctrl d是否向下移动光标和屏幕?页
  • ctrl b将屏幕上移一页,光标移到最后一行
  • ctrl f将屏幕下移一页,光标移到第一行

ctrl yctrl e仅在光标离开屏幕时更改光标位置。

由http://www.lagmorns.org/docs/vi2.html提供


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

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


以下是我在VIMRC中的解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
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

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


使用ctrl+dctrl+fctrl+bctrl+ctrl+dghmlgabdbdgbbd时,将光标保留在同一列中。

您应该定义以下选项:

1
:set nostartofline


您可以在光标移动命令前面加上一个数字,这将重复该命令多次

10CtrL+将执行CtrL+ 10次,而不是一次。


您可能会发现这个问题的答案很有用:相对于光标滚动vim,自定义映射:您可以使用那个问题中的ScrollToPercent(0)来完成这个操作。


ZEnter执行此问题所要求的操作。

zxKBdxKBdz无法正常工作的情况下工作(Vim 7.4.1689 on Ubuntu 2016.04 LTS,无特殊要求。Vimrc)


有时用K和J键滚动文本很有用。所以我在.vimrc中有这个"滚动模式"功能(也绑定在zs上)

卷轴模型


我写了一个新的插件,它可以让你在不移动光标位置的情况下浏览孔文件。这是基于折叠你的位置和你的目标位置之间的线,然后跳过折叠。或者放弃它,根本不动。

在光标是第一行,光标是最后一行,光标在中间,只需点击J、K或L(当你处于插件模式时)。

我想这很适合:https://github.com/anschnapp/move-less网站