所以我看过: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
答案 0 :(得分:13)
这不是您问题的具体答案,但您可能会选择scrolloff
选项。
例如::set scrolloff=5
将始终在窗口的开头和结尾留下5条可见行。
因此,当您使用zt
或zb
时,光标将在顶部下方5行(或分别在底部5行),这几乎可以达到您想要的20%。
我个人喜欢这种设置。
:help scrolloff
答案 1 :(得分:4)
<击> 撞击>
抱歉,此功能会更改当前行,而您需要更改当前行的窗口位置。这是正确的: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>
答案 2 :(得分:1)
有些相关,我已经^ J映射将光标向下移动一行&amp;然后重新进入屏幕:
map <C-J> jzz
map <C-K> kzz
你可以用滚动到百分比的映射代替zz。
无论如何,这会将光标留在屏幕中间而文本在其后面滚动 - 我经常使用它而不是普通的j / k。
答案 3 :(得分:0)
我知道zb
和zt
分别将当前行滚动到底部或顶部?