vim翻页(滚屏)时,如何保持光标在屏幕中的位置固定不变?

vim翻页(滚屏)时,默认光标会上移到屏幕顶端或下移到屏幕底端,我希望能保持在屏幕中的位置不变,即只移动文字,但不移动光标(相对屏幕而言)的位置。该怎么实现呢?求教,先谢... vim翻页(滚屏)时,默认光标会上移到屏幕顶端或下移到屏幕底端,我希望能保持在屏幕中的位置不变,即只移动文字,但不移动光标(相对屏幕而言)的位置。

该怎么实现呢?求教,先谢过!
展开
 我来答
hqxz556
2016-06-30 · TA获得超过2831个赞
知道大有可为答主
回答量:1686
采纳率:93%
帮助的人:563万
展开全部

还没想到更简单的方法,现在只能靠写个函数来实现。


因为除了 jk 之类的命令,通常上下移动都不能保持列。(c-d c-u 这样的命令可以保持行)

所以比如还想用 c-f 向下挪,可以利用类似这样的技巧:

nnoremap <silent>   <C-F>   :call ScrollDown()<CR>

function! ScrollDown ()
    let wh = winheight(0)-2
    let wl = winline()-1
    
    if wl >= 1    
        exe "normal! ". wl ."k"
    endif
    exe "normal! ". wh ."jzt"
    if wl >= 1
        exe "normal! ". wl ."j"
    endif
endfunction


原理是:

先求一下一屏有多高,和当前在第几行。
然后先用 k 向上挪到第一行。再向下挪一屏,再把当前行绘制到当前屏第一行。(相当于挪一屏)
再用 j 向下挪原来那么多行。(相当于恢复光标位置)


放到 vimrc 里就可以用了。向上挪改下函数中的 j k 就行了。


简单写的,可能会有 bug。

另外原来的 c-f 是能接受计数的,比如 3<c-f> 是翻3屏,现在要还想实现类似的功能,函数还需要写得再复杂一些。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式