Przewiń jedną czwartą (25%) ekranu w górę lub w dół

15

Często przewijanie całej strony jest zbyt dezorientujące, pół strony za dużo, ale ćwierć strony jest w sam raz. Obecnie robię to, przytrzymując klawisze strzałek.

Jak łatwo przewijać 25% strony w dół i w górę?

Louis Hong
źródło
1
sprawdź przekreśloną funkcję w tej odpowiedzi: stackoverflow.com/a/3102890
Sundeep,

Odpowiedzi:

20

Może ctrldi ctrlumoże być tym, czego szukasz. Domyślnie poruszają się o połowę ekranu.

Od :h CTRL-D:

Przewiń okno w dół w buforze. Liczba linii pochodzi z opcji „przewijania” (domyślnie: pół ekranu).

Jeśli podano [liczba], najpierw ustaw opcję przewijania na [liczba].

Co oznacza, że ​​po raz pierwszy chcesz przewijać okno, XXctrldgdzie XX oznacza 25% liczby linii w oknie. Po scrollustawieniu wartości XX można następnie użyć ctrldi ctrluprzesunąć 25% ekranu.

Myślę też, że :h scrollingmoże to być dla ciebie interesujące.


Edytować

A oto kolejne rozwiązanie z funkcją i mapowaniami do dodania do .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>

Funkcja uzyska wysokość bieżącego okna i zgodnie z jej parametrem przewinie ekran w górę lub w dół o jedną czwartą wysokości.

Odwzorowania będą wywoływać funkcję, pierwsza w górę, a druga w dół.

Oczywiście możesz zmienić <up>i <down>niektóre inne klawisze, jeśli chcesz zachować domyślne zachowanie klawiszy strzałek.

statox
źródło
2
Wydaje się, że użycie ctrl-Ei ctrl-Ymapowanie może mieć sens , ponieważ a). masz wtedy osobne skróty do przewijania 1/2 strony i 1/4 strony. b). zachowanie ctrl-U/ ctrl-Djest spójne i nie zależy od tego, czy wcześniej korzystałeś z mapowania.
Bogaty
Nie rozumiem twojej ważnej uwagi. Co masz na myśli wpisać ręcznie? Obecnie użycie tego usuwa linię zamiast przesuwania strony.
Louis Hong
@LouisHong Zobacz wiersz, let key="^U"w którym część pomiędzy podwójnym cudzysłowem ma reprezentować kod klucza ctrl+u. Więc jeśli skopiowałeś funkcję w vimie, umieść kursor na pierwszym podwójnym trafieniu w cudzysłów, ci"aby zmodyfikować treść cytatów, a następnie wciśnij, ctrl+va następnie ctrl+uw wierszu to samo let key="^D".
statox
@Rich: Tak, to dobra uwaga. Użyłem klawiszy strzałek, ponieważ użył tego, co powiedział OP, ale twój punkt jest istotny.
statox
@statox Źle mnie zrozumiałeś! (Nie byłem jasny). Miałem na myśli użycie let key="^Y"zamiast let key="^U". Stworzy to samo zachowanie, ale bez wpływu na 'scroll'ustawienie.
Bogaty
3

Możesz używać ctrlei, ctrlyaby przesuwać stronę o jedną linię w górę iw dół.

Następnie, jeśli chcesz przenieść +/- 25%, możesz użyć, 20ctrleco spowoduje przesunięcie cię o 20 linii w dół.

Oto również dobrze wyjaśnione pytanie, które jest podobne do twojego: /programming/3458689/how-to-move-screen-without-moving-cursor-in-vim

A. Dziedziczak
źródło
3

I anyżową statox podejście tak przewija bardziej spójne ciągu linewraps. Jeśli chcesz ćwierć kroku, zmień 0,618 z powrotem na 0,25 lub cokolwiek innego.

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>
Possum Gallo
źródło
0

Jeśli potrzebujesz dobrej ogólnej odpowiedzi, a nie dokładnej 25%, możesz wziąć pod uwagę normalną liczbę wierszy na stronie, podzielić przez 25 i ustawić niektóre odwzorowania systemowe. Na przykład, jeśli zwykle masz na ekranie około 100 linii na raz, to 25% z nich to 25 linii, dzięki czemu możesz ustawić mapowanie klawiszy na czymś takim jak duże J i K, aby szybko poruszać się w górę i w dół o 25 linii

noremap J 25j
noremap K 25k

Jeśli chcesz po prostu przeskoczyć do ćwiartki całego pliku, w trybie normalnym po prostu wpisz:

25%
Gajit
źródło
1
Wydaje mi się, że z twoim rozwiązaniem noremap J 25jwiążą się dwie wady: ustalenie wartości na sztywno, 25dlatego np. Gdy na przykład podzielisz okno 100 linii w poziomie, twoje mapowanie będzie faktycznie poruszać się w 50% nowych okien. O twojej drugiej opcji :25%nie wiedziałem, że ona istnieje, ale z moich testów wydaje się, że ustawia kursor na pozycji opartej na pierwszej linii: jeśli mam bufor 100 linii i chcę przejść, pisanie 25% do przodu :25%przyniesie mi w linii 25 bez względu na to, gdzie był mój kursor. Czy możesz również umieścić temat pomocy opisujący tę funkcję, której nie mogę znaleźć w dokumencie?
statox
1
Znalazłem temat pomocy na :h N%:-)
statox