vim希望光标底部某一行时屏幕就开始下滚(也就是始终保持底部有N行),应该怎么实现?

发布网友 发布时间:2022-04-22 23:09

我来回答

3个回答

热心网友 时间:2023-10-08 16:46

function! MyAutoScroll()
let s:SusLines=5
if winheight(winnr())-winline()>=s:SusLines
return
else
let thisline=winline()
let inbetween=winheight(winnr())-thisline
while inbetween <= s:SusLines
exec "normal! \<c-e>"
let inbetween=inbetween+1
endwhile
echo winheight(winnr()) . winline() . inbetween. s:SusLines
endif
endfunction

autocmd! CursorMoved,CursorMovedI * call MyAutoScroll()

把上面的代码保存为myautoscroll.vim,放在~/.vim/plugin下面就可以了。该代码默认在光标下面保留5行,如果你想保留其它行数可以设置let s:SusLines=你想要的值。

为你写的代码,亲测可用。

热心网友 时间:2023-10-08 16:46

考虑 autocmd 的 CursorMoved 和 CursorMovedI 这两个触发条件。它们分别在普通模式和插入模式下,光标移动后触发。

可以写个函数,判断光标距屏幕底部的距离,比如用 winheight(0) - winline(),当小于某个值后向下滚屏。当然也可以先判断一下屏幕的高度,当不小于某个值之后才启用自动滚屏。看你的需求了。

热心网友 时间:2023-10-08 16:47

set scrolloff=4 "距离4行时开始滑动

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com