首页 文章

如何移动屏幕而不在Vim中移动光标?

提问于
浏览
510

我最近发现了Vim的Ctrl E和Ctrl Y快捷键,分别用一行步骤上下移动屏幕,而不移动光标 .

你知道任何将光标留在原处的命令,但是移动屏幕使得有光标的线成为第一行吗? (拥有最后一行的命令将是一个很好的奖励) .

我可以通过手动按Ctrl E(或Ctrl Y)适当的次数来实现这一点,但是有一个命令以某种方式直接做到这一点会很好 .

有任何想法吗?

10 回答

  • 4
    • zz - 将当前行移动到屏幕中间
      Careful with zz ,如果您碰巧有意外的大写锁定,您将保存并退出 vim !)

    • zt - 将当前行移动到屏幕顶部

    • zb - 将当前行移动到屏幕底部

  • 2

    另外:

    • Ctrl-y将屏幕向上移动一行

    • Ctrl-e将屏幕向下移动一行

    • Ctrl-u向上移动光标和屏幕½页

    • Ctrl-d向下移动光标和屏幕½页

    • Ctrl-b将屏幕向上移动一页,将光标向上移动到最后一行

    • Ctrl-f将屏幕向下移动一页,将光标移动到第一行

    如果将光标移出屏幕,Ctrl-y和Ctrl-e仅更改光标位置 .

    友情提供http://www.lagmonster.org/docs/vi2.html

  • 521

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

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

    使用Ctrl D,Ctrl F,Ctrl B,Ctrl U,G,H,M,L,gg时将光标保留在同一列中

    您应该定义以下选项:

    :set nostartofline
    
  • 2

    这是我在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
    

    这样光标就会停留在屏幕中间,屏幕会向上或向下移动 .

  • 33

    你可能会发现这个问题很有用:Scrolling Vim relative to cursor, custom mapping:你可以使用 ScrollToPercent(0) 来解决这个问题 .

  • 12

    您可以使用数字为光标移动命令添加前缀,这将多次重复该命令

    10Ctrl E将执行Ctrl E 10次而不是1次 .

  • 4

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

    scroll_mode.vim

  • 742

    zEnter正是这个问题所要求的 .

    它的工作原理奇怪的是zz无法工作(在Ubuntu 2016.04 LTS上没有特殊的.vimrc的vim 7.4.1689)

  • 1

    我写了一个新的插件,它使您能够在不移动光标位置的情况下导航孔文件 . 它基于折叠您的位置和目标位置之间的线条,然后跳过折叠 . 或者中止它,根本不动 .

    它也很容易在光标之间快速切换是第一行,光标是最后一行,光标在中间只需单击j,k或l(当你处于插件模式时) .

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

相关问题