vim翻页慢
- 作者: 小小无邪控
- 来源: 51数据库
- 2020-09-29
还没想到更简单的方法,现在只能靠写个函数来实现。
因为除了 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屏,现在要还想实现类似的功能,函数还需要写得再复杂一些。
同问。。。
因为除了 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屏,现在要还想实现类似的功能,函数还需要写得再复杂一些。
同问。。。
推荐阅读
