代码之家  ›  专栏  ›  技术社区  ›  Andrew Wagner

在Vim中平滑滚动的最佳方式是什么?

  •  68
  • Andrew Wagner  · 技术社区  · 14 年前

    Vim中的主要滚动命令有:

    1. Ctrl键 - Ctrl键 - 翻页 翻页 按整页滚动
    2. Ctrl键 - U Ctrl键 D
    3. Ctrl键 - Y - 滚动一行

    对于前两个,我每次都会失去视觉背景,所以我养成了打后一个的坏习惯( Ctrl键 - Y Ctrl键 - E )重复地。

    由于目前没有第一方支持平滑滚动,那么最不受欢迎的解决方案/插件是什么?

    8 回复  |  直到 13 年前
        1
  •  39
  •   Community CDub    8 年前

    :我现在推送了这段代码,并根据 :help write-plugin ,以 Github repo

    使用键盘

    .vimrc :

    function SmoothScroll(up)
        if a:up
            let scrollaction="^Y"
        else
            let scrollaction="^E"
        endif
        exec "normal " . scrollaction
        redraw
        let counter=1
        while counter<&scroll
            let counter+=1
            sleep 10m
            redraw
            exec "normal " . scrollaction
        endwhile
    endfunction
    
    nnoremap <C-U> :call SmoothScroll(1)<Enter>
    nnoremap <C-D> :call SmoothScroll(0)<Enter>
    inoremap <C-U> <Esc>:call SmoothScroll(1)<Enter>i
    inoremap <C-D> <Esc>:call SmoothScroll(0)<Enter>i
    

    • scroll 选项
    • 可自定义的滚动速度(调整 sleep
    • 在正常或插入模式下工作。

    :所有您复制和粘贴的内容,请记住 ^

    • ^Y 控制键 - v 控制键 - Y
    • ^E - v 控制键 -

    但是, <C-U> <Enter>

    使用鼠标

    this question set mouse=n ):


    vimrc先生 有以下几行

     set mouse=a
     map <ScrollWheelUp> <C-Y>
     map <ScrollWheelDown> <C-E>
    

        2
  •  11
  •   Andrew Wagner    14 年前

    vim的tips.txt中有一个简单的重新映射攻击:

    Smooth scrolling                    *scroll-smooth*
    
    If you like the scrolling to go a bit smoother, you can use these mappings:
    
        :map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
        :map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
    
        3
  •  8
  •   terryma    12 年前

    无耻的插件,但我在这里创建了一个插件,您可以使用它轻松调整滚动动画的距离、速度和持续时间: https://github.com/terryma/vim-smooth-scroll

        4
  •  7
  •   Community CDub    8 年前

    最近的插件

    here ,但基本上有一个很棒的插件,我们现在可以用它来滚动,叫做 terryma/vim-smooth-scroll


    安装非常简单:

    我用 Vundle .vimrc.bundles :

    Bundle terryma/vim-smooth-scroll
    

    在今天(2016年4月29日)提供的最新版本Vundle中,您可以将其放入 vimrc先生 :

    Plugin 'terryma/vim-smooth-scroll'
    

    如文档中所述,您可以设置3个参数: 距离 , 期间 速度 .

    vimrc先生

    noremap <silent> <c-b> :call smooth_scroll#up(&scroll*2, 10, 4)<CR>
    noremap <silent> <c-f> :call smooth_scroll#down(&scroll*2, 10, 4)<CR>
    
        5
  •  4
  •   Mike    14 年前

    我要做的是将键盘重复设置为非常快,大约120个字符/秒,并且延迟很小。 然后我映射到4j和4k 我使用j和k在源代码中上下导航,这两个工具可以很好、快速、非常平滑地上下移动光标。 但好的方面是,这在Linux上有效,而不是在Windows上。

    另外,我做了Devin做的事情,我将scrolloffset设置为5。

    这些东西已经为我工作多年了。我只使用vim,从不使用gvim。

        6
  •  3
  •   DevinDawson    14 年前

    这并不是完全平滑的滚动,但这是我处理跳页时不丢失上下文的方式。

    将so设置为7

    全球的
    {不在Vi}
    这将使您的工作环境变得清晰可见。如果 如果将其设置为一个非常大的值(999),光标线将始终保持不变 有关水平滚动,请参见“侧滚动”。 注意:当设置“兼容”时,此选项设置为0。

        7
  •  3
  •   Chad Skeeters    8 年前

    cskeeters/vim-smooth-scroll 支持平滑滚动,无需配置。它支持平滑滚动 zt , zz zb terryma's plugin . 已应用一些打开的拉取请求。

        8
  •  1
  •   fde-capu UncleO    5 年前
    N <CR-E>
    N <CR-Y>
    

    …其中“N”是要滚动的单行数。

        9
  •  1
  •   fde-capu UncleO    4 年前

        10
  •  0
  •   silviubogan    9 年前

    我刚找到 this plugin <C-D>/<C-U> , <C-F>/<C-B>)

    Plugin 'yonchu/accelerated-smooth-scroll'
    

    然后重新启动Vim并运行 :PluginInstall 命令,然后再次重新启动Vim并使用 <C-D> ( Ctrl+D )及 <C-O> ( )命令正常。

    不幸的是,这个插件也移动了光标,而不是我想要的:像 <C-E> <C-Y>

        11
  •  0
  •   Jason Eveleth    5 年前

    这结合了许多答案,这就是我使用的。

    noremap <expr> <C-u> repeat("\<C-y> :sleep 10m<CR>", winheight('%')/2)
    noremap <expr> <C-d> repeat("\<C-e> :sleep 10m<CR>", winheight('%')/2)
    
        12
  •  0
  •   mattb MrFlick    4 年前

    我稍微修改了@Keith Pinson的代码,以便也可以映射ctrl-f和ctrl-b:

    function SmoothScroll(scroll_direction, n_scroll)
        let n_scroll = a:n_scroll
        if a:scroll_direction == 1
            let scrollaction=""
        else 
            let scrollaction=""
        endif
        exec "normal " . scrollaction
        redraw
        let counter=1
        while counter<&scroll*n_scroll
            let counter+=1
            sleep 10m " ms per line
            redraw
            exec "normal " . scrollaction
        endwhile
    endfunction
    
    " smoothly scroll the screen for some scrolling operations
    nnoremap <C-U> :call SmoothScroll(1,1)<cr>
    nnoremap <C-D> :call SmoothScroll(2,1)<cr>
    nnoremap <C-B> :call SmoothScroll(1,2)<cr>
    nnoremap <C-F> :call SmoothScroll(2,2)<cr>
    
    推荐文章