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行时开始滑动