上下滚动屏幕的四分之一(25%)


15

我经常发现滚动整页太混乱,半页滚动太多,但四分之一页恰到好处。我目前仅通过按住箭头键就可以做到这一点。

如何轻松上下滚动页面的25%?


1
检查此答案中的划掉的功能:stackoverflow.com/a/3102890
Sundeep

Answers:


20

也许ctrld并且ctrlu可能是您正在寻找的东西。默认情况下,它们移动屏幕的一半。

来自:h CTRL-D

在缓冲区中向下滚动窗口。行数来自“滚动”选项(默认值:半屏)。

如果给出[count],则首先将'scroll'选项设置为[count]。

这意味着您第一次要在窗口中滚动时,可以执行XXctrldXX是窗口中行数的25%的操作。当它设置scroll为XX值时,您可以使用ctrldctrlu移动屏幕的25%。

另外,我认为这:h scrolling可能对您很有趣。


编辑

这是带有功能和要添加到您的一些映射的另一个解决方案.vimrc

function! ScrollQuarter(move)
    let height=winheight(0)

    if a:move == 'up'
        let key="\<C-Y>"
    else
        let key="\<C-E>"
    endif

    execute 'normal! ' . height/4 . key
endfunction

nnoremap <silent> <up> :call ScrollQuarter('up')<CR>
nnoremap <silent> <down> :call ScrollQuarter('down')<CR>

该函数将获取当前窗口的高度,并根据其参数将屏幕上下滚动四分之一高度。

映射将调用该函数,第一个上升,第二个下降。

当然,如果要保留箭头键的默认行为,则可以更改<up><down>其他键。


2
似乎使用ctrl-Ectrl-Y在映射中可能更有意义,因为a)。然后,您将有分别用于1/2页和1/4页滚动的快捷方式。b)。ctrl-U/ 的行为ctrl-D是一致的,并不取决于您以前是否使用过映射。
丰富

我不明白您的重要提示。手动输入是什么意思?当前使用此功能将删除一行而不是移动页面。
Louis Hong

@LouisHong请参阅let key="^U"双引号之间的部分,该行应代表的关键代码ctrl+u。因此,如果您在vim中复制了该函数,则将光标放在第一个双引号命中上ci"以修改引号的内容,然后在行上命中ctrl+v后跟上ctrl+u相同的内容let key="^D"
statox

@Rich:是的,这很不错。我使用了箭头键,因为那是OP所说的,但是您的观点很重要。
statox

@statox你误解了我!(我不清楚)。我的意思是用let key="^Y"代替let key="^U"。它将创建相同的行为,但不影响'scroll'设置。
Rich


3

我使用了statox方法,因此它在换行上滚动时更加一致。如果要四分之一步,请将0.618改回0.25或其他值。

function! ScrollGolden(move)
    let height=winheight(0)
    if a:move == 'up'
        let prep='L'
        " let key="^Y"
        let key='gk'
        let post='zb'
    elseif a:move == 'down'
        let prep='H'
        " let key="^E"
        let key='gj'
        let post='zt'
    endif
    execute 'normal! ' . prep . float2nr(round(height*0.618)) . key . post
endfunction
nnoremap <silent> <BS>    :call ScrollGolden('up')<CR>
nnoremap <silent> <Space> :call ScrollGolden('down')<CR>

0

如果您想要一个好的通用答案而不是确切的25%,则可以将页面上的正常行数除以25,然后设置一些系统映射。例如,如果您通常一次在屏幕上显示约100行,那么其中的25%是25行,因此您可以在诸如大写J和K之类的内容上设置键映射,以快速上下移动25行

noremap J 25j
noremap K 25k

如果您只想跳到整个文件的四分之一标记,则在普通模式下只需键入:

25%

1
我认为您的解决方案有两个缺点:noremap J 25j对值进行硬编码25,例如,当您水平分割100行的窗口时,您的映射实际上将在新窗口中导航50%。关于您的第二个选项,:25%我不知道它的存在,但是从我的测试看来,它会将光标置于基于第一行的位置:如果我有100行的缓冲区,并且我想向前移动25%,:25%则会带给我在第25行,无论我的光标在哪里。还可以请您在文档中找不到描述此功能的帮助主题吗?
statox

1
我在以下位置找到了帮助主题:h N%:-)
statox
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.