Прокрутите четверть (25%) экрана вверх или вниз

15

Я часто нахожу прокрутку полной страницы слишком дезориентирующей, полстраницы слишком большой, но четверть страницы - это как раз то, что нужно. В настоящее время я делаю это, просто удерживая клавиши со стрелками.

Как мне легко прокрутить 25% страницы вниз и вверх?

Луи Хонг
источник
1
проверьте зачеркнутую функцию в этом ответе: stackoverflow.com/a/3102890
Sundeep

Ответы:

20

Может быть ctrldи ctrluможет быть то, что вы ищете. По умолчанию они перемещают половину экрана.

От :h CTRL-D:

Окно прокрутки вниз в буфере. Количество строк определяется параметром «прокрутка» (по умолчанию: половина экрана).

Если задано значение [количество], сначала установите для параметра «прокрутка» значение [количество].

Это означает, что в первый раз, когда вы хотите прокрутить окно, вы можете сделать, XXctrldгде XX - это 25% от числа строк в вашем окне. Когда он устанавливает scrollзначение XX, вы можете использовать ctrldи ctrluдля перемещения 25% экрана.

Кроме того, я думаю, что это :h scrollingможет быть интересно для вас.


редактировать

А вот еще одно решение с функцией и некоторыми сопоставлениями, которые нужно добавить к вашему .vimrc:

function! ScrollQuarter(move)
    let height=winheight(0)

    if a:move == 'up'
        let key="\<C-Y>"
    else
        let key="\<C-E>"
    endif

    execute 'normal! ' . height/4 . key
endfunction

nnoremap <silent> <up> :call ScrollQuarter('up')<CR>
nnoremap <silent> <down> :call ScrollQuarter('down')<CR>

Функция получит высоту текущего окна и соответственно ее параметру прокрутит экран вверх или вниз на четверть высоты.

Сопоставления вызовут функцию: первый поднимется, а второй снизится.

Конечно, вы можете изменить <up>и <down>некоторые другие клавиши, если хотите сохранить поведение клавиш со стрелками по умолчанию.

statox
источник
2
Похоже, это может иметь больше смысла для использования ctrl-Eи ctrl-Yв отображениях, потому что а). тогда у вас есть отдельные сочетания клавиш для прокрутки на 1/2 страницы и 1/4 страницы. б). поведение ctrl-U/ ctrl-Dсогласованно и не зависит от того, использовали ли вы ранее отображение.
Богатый
Я не понимаю вашу важную заметку. Что значит ввод вручную? В настоящее время использование этого удаляет строку вместо перемещения страницы.
Луис Хонг,
@LouisHong Посмотрите на строку, let key="^U"в которой часть между двойными кавычками должна представлять код клавиши ctrl+u. Поэтому, если вы скопировали функцию в vim, наведите курсор на первую двойную кавычку, ci"чтобы изменить содержимое кавычек, а затем нажмите, ctrl+vа затем ctrl+uна ту же строку let key="^D".
statox
@Rich: Да, это хороший момент. Я использовал клавиши со стрелками, потому что OP сказал, что он использовал, но ваша точка зрения актуальна.
statox
@statox Ты меня неправильно понял! (Мне было непонятно). Я имел в виду использовать let key="^Y"вместо let key="^U". Это создаст то же поведение, но не влияет на 'scroll'настройку.
Рич
3

Вы можете использовать ctrleи ctrlyдля перемещения страницы на одну строку вверх и вниз.

Затем, если вы хотите, чтобы +/- 25% было перемещено, вы можете использовать его, 20ctrleи это сместит вас на 20 строк вниз.

Вот также хороший объясненный вопрос, который похож на ваш: /programming/3458689/how-to-move-screen-without-moving-cursor-in-vim

А. Дзедзичак
источник
3

Я неизмененном statox подход так прокручивает более последовательно над linewraps. Если вы хотите четверть шага, измените 0,618 обратно на 0,25 или что-то еще.

function! ScrollGolden(move)
    let height=winheight(0)
    if a:move == 'up'
        let prep='L'
        " let key="^Y"
        let key='gk'
        let post='zb'
    elseif a:move == 'down'
        let prep='H'
        " let key="^E"
        let key='gj'
        let post='zt'
    endif
    execute 'normal! ' . prep . float2nr(round(height*0.618)) . key . post
endfunction
nnoremap <silent> <BS>    :call ScrollGolden('up')<CR>
nnoremap <silent> <Space> :call ScrollGolden('down')<CR>
Поссум Галло
источник
0

Если вы хотите получить хороший общий ответ, а не точные 25%, вы можете рассчитать нормальное число строк на странице, поделив его на 25 и установив некоторые системные сопоставления. Например, если у вас обычно около 100 строк на экране за раз, тогда 25% от этого - 25 строк, так что вы можете установить отображение клавиш на что-то вроде вашей заглавной буквы J и K для быстрого перемещения вверх и вниз на 25 строк

noremap J 25j
noremap K 25k

Если вы хотите просто перейти на четвертую отметку всего файла, то в обычном режиме просто наберите:

25%
Gajit
источник
1
Я думаю, что у вашего решения есть два недостатка: noremap J 25jжестко кодировать значение, 25поэтому, когда, например, вы горизонтально разбиваете окно на 100 строк, ваше отображение фактически перемещается в 50% новых окон. Что касается вашего второго варианта, :25%я не знал, что он существует, но из моих тестов кажется, что он помещает курсор в позицию, основанную на первой строке: если у меня есть буфер на 100 строк, и я хочу переместиться на 25%, ввод текста :25%приведет меня в строке 25 независимо от того, где был мой курсор. Также не могли бы вы поместить раздел справки, описывающий эту функцию, которую я не могу найти в документе?
statox
1
Я нашел тему справки по адресу :h N%:-)
statox