我经常发现滚动整页太混乱,半页滚动太多,但四分之一页恰到好处。目前,我只需要按住箭头键即可。

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

评论

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

#1 楼

也许ctrld和ctrlu可能就是您想要的。默认情况下,它们移动屏幕的一半。

:h CTRL-D


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

如果给出[count],则首先设置“滚动”选项
到[count]。


这意味着您第一次要在窗口中滚动时,可以执行XXctrld,其中XX是窗口中行数的25%。将scroll设置为XX值后,您可以使用ctrld和ctrlu移动屏幕的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>更改为其他一些键。

评论


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

–丰富
16-10-25在12:36

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

–路易·洪
16-10-25在18:00



@LouisHong参见行let key =“ ^ U”双引号之间的部分旨在表示ctrl + u的键控代码。因此,如果您在vim中复制了该函数,则将光标放在第一个双引号上,单击ci“来修改引号的内容,然后按ctrl + v,然后按ctrl + u到同一行,让key =” ^ D“ 。

–statox♦
16-10-25在18:11

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

–statox♦
16-10-26在9:06

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

–丰富
16-10-26在9:31



#2 楼

您可以使用ctrle和ctrly上下移动一页。

然后,如果您想将+/- 25%的位置移动,则可以使用20ctrle,这将使您向下移动20行。

这也是一个很好的解释性问题,类似于您的问题:https://stackoverflow.com/questions/3458689/how-to-move-screen-without-moving-cursor-in- vim

#3 楼

我使用了statox变量,以便在换行时滚动得更一致。

#4 楼

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

noremap J 25j
noremap K 25k


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

25%


评论


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

–statox♦
16-10-27在8:09

我在:h N%:-)找到了帮助主题。

–statox♦
16-10-27在8:31