Прокрутка 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
6
задан Nick Canzoneri 23 June 2010 в 17:52
поделиться

3 ответа

 функция ScrollToPercent (в процентах)
пусть curlnr = line ('.')
let targetlnr = line ('w0') + (winheight (0) * a: процент / 100)
пусть movelines = targetlnr-curlnr
если movelines <0
пусть движение = 'k'
пусть movelines = -movelines
elseif movelines> 0
пусть движение = 'j'
еще
возврат 0
endif
если есть ("float") && type (movelines) == type (0.0)
пусть movelines = float2nr (movelines)
endif
выполнить "нормально!" .movelines.motion
конечная функция
Извините, эта функция изменяет текущую строку, а вам нужно изменить положение окна текущей строки. Вот правильный:

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>
5
ответ дан 8 December 2019 в 12:18
поделиться

Это не конкретный ответ на ваш вопрос, но вам может понравиться опция scrolloff .

Например: : set scrolloff = 5 всегда будет оставлять 5 видимых строк в начале и в конце вашего окна.

Итак, когда вы используете zt или zb , ваш курсор переместится на 5 строк под верхом (или на 5 строк над низом, соответственно), что может быть почти желаемым 20%. .

Мне лично нравится этот сеттинг.

:help scrolloff
13
ответ дан 8 December 2019 в 12:18
поделиться

Я так понимаю, вы знаете о zb и zt, которые прокручивают текущую строку вниз или вверх, соответственно?

0
ответ дан 8 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: