Прокрутіть чверть (25%) екрана вгору або вниз


15

Я часто вважаю, що прокрутка повної сторінки занадто дезорієнтує, половину сторінки занадто багато, але чверть сторінки - це правильно. Я зараз це роблю, просто утримуючи клавіші зі стрілками.

Як я легко прокручую 25% сторінки вниз і вгору?


1
перевірити перекреслену функцію у цій відповіді: stackoverflow.com/a/3102890
Sundeep

Відповіді:


20

Можливо, ctrldі ctrluможе бути тим, що ви шукаєте. За замовчуванням вони переміщують половину екрана.

Від :h CTRL-D:

Прокрутіть вікно вниз у буфері. Кількість рядків походить від параметра "прокручування" (за замовчуванням: половина екрана).

Якщо [count] задано, спочатку встановіть опцію 'scroll' на [count].

Це означає, що перший раз, коли ви хочете прокручувати вікно, ви можете робити 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>деякі інші клавіші, якщо хочете зберегти поведінку клавіш зі стрілками за замовчуванням.


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: Так, це хороший момент. Я використовував клавіші зі стрілками, тому що ОП сказав, що він використовував, але ваш пункт є актуальним.
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

Я варіював підхід статистики, так що він прокручується більш послідовно по рядках. Якщо потрібно четвертий крок, змініть 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%

1
Я думаю, що у вашому рішенні є два недоліки: noremap J 25jжорсткі коди значення, 25таким чином, якщо, наприклад, ви горизонтально розділили вікно на 100 рядків, ваше відображення фактично переміститься до 50% нових вікон. З приводу вашого другого варіанту :25%я не знав, що він існує, але з моїх тестів видно, що він виставляє курсор на позицію, засновану на першому рядку: якщо у мене буфер 100 рядків і я хочу рухатись на 25% введення, введіть :25%мене по лінії 25 незалежно від того, де був мій курсор. Також можете, будь ласка, помістити тему довідки, що описує цю функцію, я не можу її знайти в документі?
statox

1
Тему допомоги я знайшов за адресою :h N%:-)
statox
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.