相对于游标滚动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

我知道zbzt分别将当前行滚动到底部或顶部?

链接地址: http://www.djcxy.com/p/49513.html

上一篇: Scrolling Vim relative to cursor, custom mapping

下一篇: Delete lines backwards