Прокрутка Vim относительно курсора, настраиваемое отображение - PullRequest
6 голосов
/ 23 июня 2010

Итак, я прочитал :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

Ответы [ 4 ]

13 голосов
/ 23 июня 2010

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

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

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

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

:help scrolloff
4 голосов
/ 23 июня 2010

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>
1 голос
/ 17 сентября 2010

В некотором роде, я сопоставил ^ J, чтобы переместить курсор вниз на одну строку и затем перецентрировать экран:

map <C-J> jzz
map <C-K> kzz

Вы можете заменить свое отображение прокрутки на процент вместо zz.

В любом случае, это приводит к тому, что курсор остается в центре экрана, а текст прокручивается позади него - я часто использую это вместо обычного j / k.

0 голосов
/ 23 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...