Navigation 长线水平导航

Navigation 长线水平导航,navigation,vim,Navigation,Vim,我怎样才能做到以下几点: 向右快速移动,类似于zw(类似于zl,但跳到单词上) 只移动光标所在的一条长线。文件的其余部分将保留在其位置 我有.vimrc设置立即设置RAP。这是因为代码看起来比包装行更好。但水平导航存在一个问题 我注意到zl(不要把l(l)和1)快捷键混淆,它会向右移动(zh向左)。你试过了吗 您可以使用映射向左或向右滚动20个字符: map <C-L> 20zl " Scroll 20 characters to the right map <C-H>

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

  • 向右快速移动,类似于
    zw
    (类似于
    zl
    ,但跳到单词上)
  • 只移动光标所在的一条长线。文件的其余部分将保留在其位置
  • 我有
    .vimrc
    设置
    立即设置RAP
    。这是因为代码看起来比包装行更好。但水平导航存在一个问题

    我注意到
    zl
    (不要把l(l)和1)快捷键混淆,它会向右移动(
    zh
    向左)。

    你试过了吗

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

    map <C-L> 20zl " Scroll 20 characters to the right
    map <C-H> 20zh " Scroll 20 characters to the left
    
    map 20zl“向右滚动20个字符
    map 20zh“向左滚动20个字符
    
    不应用映射,您可以使用
    zL
    将视图向右移动半个屏幕宽度,并使用
    zH
    将视图向左移动


    关于你问题的第二部分:我认为这是不可能的。你可以把整行内容拉出来,粘贴到第二个缓冲区中,然后滚动到那里。只要你只是在读台词,这就行了。只要你想改变什么,问题就会出现。但是它相当麻烦…

    对于问题的第一部分,使用shift+滚动键可以更快地浏览文本,就像在注释中一样,
    zL
    zH
    是完美的,所以我将在这里添加这一点

    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.
    

    为了更舒适地滚动,类似于插入模式下由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
    
    nnoremap zh:调用水平滚动模式('h')
    nnoremap zl:调用水平滚动模式('l')
    nnoremap zH:调用水平滚动模式('H')
    nnoremap zL:调用水平滚动模式('L')
    功能!水平滚动模式(调用字符)
    如果&包装
    返回
    恩迪夫
    echohl标题
    让输入的字符=a:调用字符
    而索引(['h','l','h','l'],键入字符)!=-1.
    执行'正常!z'.\u字符
    重画
    echon'--水平滚动模式(h/l/h/l)'
    让输入的字符=nr2char(getchar())
    循环结束
    echohl None | echo“”|重绘
    端功能
    

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

    添加其他答案时,还需注意
    ze
    zs
    ,这意味着:将屏幕移到光标的左/右

    下面我粘贴了我的滚动助记符 同时查看键盘上
    h
    l
    (和
    t
    b
    )的位置,以记住屏幕的移动位置

    +-------------------------------+
    ^                               |
    |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                               |
    +-------------------------------+
    
    +-------------------------------+
    ^                               |
    |c-e(保持光标)|
    |H(igh)zt(顶部)|
    |                   ^           |
    |泽| zs|
    |M(iddle)zh/zh-zl/zl|
    |                   |           |
    |五|
    |L(ow)zb(底部)|
    |c-y(保持光标)|
    五|
    +-------------------------------+
    
    我希望您已经看到zL(将半个屏幕宽度向右移动)和6zl(将6个字符向右移动)。关于你的第二个问题,我不知道如何调整单个线条的视图。@Neilb谢谢zL和zH。第二个问题比较难。第二个缓冲区是个好主意。并且实现了我想要的,为此我使用了
    :sp
    立即设置RAP
    是必需的
    zL
    zH
    对我不起作用。发生了什么事?@nilon你的光标需要在一条“长”线上。这不是等同于使用w和b吗?是的,是的。这是vi/vim编辑器中水平和垂直导航的另一种方式。