Answers:
也许ctrld并且ctrlu可能是您正在寻找的东西。默认情况下,它们移动屏幕的一半。
来自:h CTRL-D
:
在缓冲区中向下滚动窗口。行数来自“滚动”选项(默认值:半屏)。
如果给出[count],则首先将'scroll'选项设置为[count]。
这意味着您第一次要在窗口中滚动时,可以执行XXctrldXX是窗口中行数的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
是一致的,并不取决于您以前是否使用过映射。
let key="^U"
双引号之间的部分,该行应代表的关键代码ctrl+u
。因此,如果您在vim中复制了该函数,则将光标放在第一个双引号命中上ci"
以修改引号的内容,然后在行上命中ctrl+v
后跟上ctrl+u
相同的内容let key="^D"
。
let key="^Y"
代替let key="^U"
。它将创建相同的行为,但不影响'scroll'
设置。
您可以使用ctrle和ctrly将页面上下移动一行。
然后,如果您想移动+/- 25%,则可以使用20ctrle,这会将您向下移动20行。
这也是一个很好的解释性问题,类似于您的问题:https : //stackoverflow.com/questions/3458689/how-to-move-screen-without-moving-cursor-in-vim
我使用了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>
如果您想要一个好的通用答案而不是确切的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行,无论我的光标在哪里。还可以请您在文档中找不到描述此功能的帮助主题吗?