【问题标题】:Horizontal navigation in long lines长线水平导航
【发布时间】:2011-08-24 18:54:37
【问题描述】:

我怎样才能做到以下几点:

  1. 向右移动更快,类似于zw(类似于zl,但跳字)
  2. 只移动光标所在的一长行。文件的其余部分将保持原位

我有.vimrc 设置set nowrap。那是因为代码看起来比换行更好。但是水平导航有问题。

我注意到zl(不要将 l (L) 与 1 混淆)快捷方式向右移动(zh 向左移动)。

【问题讨论】:

  • 我想你已经看过 zL(向右移动半个屏幕宽度)和 6zl(向右移动 6 个字符)。对于你的第二个问题,我不知道如何调整单行的视图。
  • @neillb 感谢 zL 和 zH 很棒。第二个问题更难。

标签: navigation vim


【解决方案1】:

你试过:help scroll-horizontal吗?

您可以使用映射来滚动,例如,向左或向右滚动 20 个字符:

map <C-L> 20zl " Scroll 20 characters to the right
map <C-H> 20zh " Scroll 20 characters to the left

在不应用映射的情况下,您可以使用zL 将视图向右移动半个屏幕宽度,并使用zH 向左移动。

关于您问题的第二部分:我认为这是不可能的。您可以拉出整行,将其粘贴到第二个(临时)缓冲区并在那里滚动。只要您只是阅读这些行,这将起作用。一旦您想更改某些内容,就会出现问题。不过比较麻烦……

【讨论】:

  • 第二个缓冲区是个好主意。并实现了我想要的,为此我使用了:sp
  • set nowrap 为必填项
  • zLzH 不适合我。会发生什么?
  • @nilon 您的光标需要位于“长”行上。
【解决方案2】:

添加到其他答案还要注意zezs,意思是:将屏幕移动到光标的左/右

下面我粘贴我的助记符以进行滚动 还要查看键盘上hl(以及tb)的位置,以记住屏幕移动的位置

+-------------------------------+
^                               |
|c-e (keep cursor)              |
|H(igh)             zt (top)    |
|                   ^           |
|           ze      |      zs   |
|M(iddle)  zh/zH <--zz--> zl/zL |
|                   |           |
|                   v           |
|L(ow)              zb (bottom) |
|c-y (keep cursor)              |
v                               |
+-------------------------------+

【讨论】:

    【解决方案3】:

    使用 shift + 滚动键可以更快地在文本中移动

    【讨论】:

    • 这不就相当于使用w和b吗?
    • 是的。这是 vi/vim 编辑器中水平和垂直导航的另一种方式。
    【解决方案4】:

    为了更舒适的滚动,类似于插入模式下 ctrl-x,ctrl-e 或 ctrl-x,ctrl-y 触发的滚动模式,这是我在 vimrc 中添加的:

    nnoremap <silent> zh :call HorizontalScrollMode('h')<CR>
    nnoremap <silent> zl :call HorizontalScrollMode('l')<CR>
    nnoremap <silent> zH :call HorizontalScrollMode('H')<CR>
    nnoremap <silent> zL :call HorizontalScrollMode('L')<CR>
    
    function! HorizontalScrollMode( call_char )
        if &wrap
            return
        endif
    
        echohl Title
        let typed_char = a:call_char
        while index( [ 'h', 'l', 'H', 'L' ], typed_char ) != -1
            execute 'normal! z'.typed_char
            redraws
            echon '-- Horizontal scrolling mode (h/l/H/L)'
            let typed_char = nr2char(getchar())
        endwhile
        echohl None | echo '' | redraws
    endfunction
    

    这样,您可以在方便的时候平滑滚动(使用 h 或 l)或快速滚动(使用 H 或 L),而无需每次都按 z。您只需按一次 z 即可触发“水平滚动模式”,一旦您按下任何其他键,该模式就会停止。

    【讨论】:

      【解决方案5】:

      对于您问题的第一部分,如 cmets 中一样,zLzH 是完美的,所以我将在此处添加。

      zL          Move the view on the text half a screenwidth to the
                  right, thus scroll the text half a screenwidth to the
                  left.  This only works when 'wrap' is off.
      
      zH          Move the view on the text half a screenwidth to the
                  left, thus scroll the text half a screenwidth to the
                  right.  This only works when 'wrap' is off.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-23
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多