相对于游标滚动Vim,自定义映射
所以我读过:help scroll-cursor
,真的很喜欢zz
,它将光标所在的行放在窗口的中间。
我正在寻找帮助来制作一个类似于zz
的贴图,但将光标置于窗口高度的20%(或25%,30%等)上。
编辑:
感谢ZyX和Drasill,我能够修改他的功能以获得所需的功能:
function ScrollToPercent(percent)
let movelines=winheight(0)*a:percent/100
if has("float") && type(movelines)==type(0.0)
let movelines=float2nr(movelines)
endif
let oldso=&so
execute ":set so=" . movelines
execute "normal! zt"
execute ":set so=" . oldso
endfunction
function ScrollToPercent(percent) let curlnr=line('.') let targetlnr=line('w0')+(winheight(0)*a:percent/100) let movelines=targetlnr-curlnr if movelines<0 let motion='k' let movelines=-movelines elseif movelines>0 let motion='j' else return 0 endif if has("float") && type(movelines)==type(0.0) let movelines=float2nr(movelines) endif execute "normal! ".movelines.motion endfunction对不起,这个功能改变了当前行,而你需要改变当前行的窗口位置。 这是正确的:
function! ScrollToPercent(percent) let movelines=winheight(0)*(50-a:percent)/100 echo movelines if movelines<0 let motion='k' let rmotion='j' let movelines=-movelines elseif movelines>0 let motion='j' let rmotion='k' else return 0 endif if has('float') && type(movelines)==type(0.0) let movelines=float2nr(movelines) endif execute 'normal! zz'.movelines.motion.'zz'.movelines.rmotion endfunction
将这个函数放在你的.vimrc
并定义一个映射,比如:
nnoremap z%2 :<C-u>call ScrollToPercent(20)<CR>
这不是您的问题的具体答案,但您可能会喜欢scrolloff
选项。
例如:: :set scrolloff=5
将始终在窗口的开始和结束处留出5条可见行。
所以,当你使用zt
或者zb
,你的光标将会在顶部5行(或者分别在底部5行),这几乎可以成为你想要的20%。
我个人喜欢这个设置。
:help scrolloff
我知道zb
和zt
分别将当前行滚动到底部或顶部?