Scrollen Sie ein Viertel (25%) des Bildschirms nach oben oder unten

14

Ich finde das Scrollen einer ganzen Seite oft zu verwirrend, eine halbe Seite zu viel, aber eine Viertelseite ist genau richtig. Ich mache es derzeit nur durch Gedrückthalten der Pfeiltasten.

Wie scrolle ich einfach 25% der Seite runter und rauf?

Louis Hong
quelle
1
Überprüfen Sie die durchgestrichene Funktion in dieser Antwort: stackoverflow.com/a/3102890
Sundeep

Antworten:

19

Vielleicht ctrldund ctrlukönnte das sein, wonach Sie suchen. Standardmäßig wird die Hälfte des Bildschirms verschoben.

Von :h CTRL-D:

Fenster im Puffer nach unten scrollen. Die Anzahl der Zeilen ergibt sich aus der Option 'Bildlauf' (Standard: halber Bildschirm).

Wenn [count] angegeben ist, setzen Sie zuerst die Option 'scroll' auf [count].

Das heißt, wenn Sie zum ersten Mal in einem Fenster scrollen möchten, können Sie tun, XXctrldwo XX 25% der Anzahl der Zeilen in Ihrem Fenster ist. Wenn scrollder Wert XX eingestellt ist, können Sie mit ctrldund ctrlu25% des Bildschirms verschieben.

Ich denke auch, dass :h scrollingdas für Sie interessant sein könnte.


Bearbeiten

Und hier ist eine andere Lösung mit einer Funktion und einigen Zuordnungen, die Sie zu Ihrer hinzufügen können .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>

Die Funktion erhält die Höhe des aktuellen Fensters und rollt den Bildschirm entsprechend seines Parameters um ein Viertel der Höhe nach oben oder unten.

Die Zuordnungen rufen die Funktion auf, wobei die erste nach oben und die zweite nach unten geht.

Natürlich können Sie <up>und <down>zu einigen anderen Tasten wechseln , wenn Sie das Standardverhalten Ihrer Pfeiltasten beibehalten möchten.

statox
quelle
2
Es scheint sinnvoller zu sein, ctrl-Eund ctrl-Yin den Mappings zu verwenden, weil a). Sie haben dann separate Verknüpfungen für das Scrollen von 1/2 und 1/4 Seite. b). Das Verhalten von ctrl-U/ ctrl-Dist konsistent und hängt nicht davon ab, ob Sie das Mapping zuvor verwendet haben.
Rich
Ich verstehe Ihren wichtigen Hinweis nicht. Was meinst du mit manuell eingeben? Mit dieser Option wird derzeit eine Zeile gelöscht, anstatt die Seite zu verschieben.
Louis Hong
@LouisHong Siehe die Zeile, in der let key="^U"der Teil zwischen dem doppelten Anführungszeichen den Schlüsselcode von darstellen soll ctrl+u. Wenn Sie also die Funktion in vim kopiert haben, positionieren Sie den Cursor auf den ersten Treffer ci"mit doppelten Anführungszeichen , um den Inhalt der Anführungszeichen zu ändern, und klicken Sie ctrl+vanschließend ctrl+uauf denselben in der Zeile let key="^D".
statox
@Rich: Ja, das ist ein guter Punkt. Ich habe die Pfeiltasten benutzt, weil OP das gesagt hat, aber Ihr Punkt ist relevant.
statox
@statox Du hast mich falsch verstanden! (Ich war nicht klar). Ich meinte verwenden let key="^Y"statt let key="^U". Dies führt zu demselben Verhalten, ohne jedoch die 'scroll'Einstellung zu beeinflussen.
Rich
3

Sie können verwendet werden ctrleund ctrlydie Seite um eine Zeile nach oben und unten zu bewegen.

Wenn Sie möchten, dass +/- 25% verschoben werden, können Sie dies verwenden 20ctrle, um 20 Zeilen nach unten zu verschieben.

Hier ist auch eine gut erläuterte Frage, die Ihrer ähnlich ist: /programming/3458689/how-to-move-screen-without-moving-cursor-invim

A. Dziedziczak
quelle
3

Ich habe den statox- Ansatz variiert , damit er konsistenter über die Zeilenumbrüche rollt. Wenn Sie einen Viertelschritt möchten, ändern Sie 0,618 zurück auf 0,25 oder was auch immer.

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
quelle
0

Wenn Sie eine gute allgemeine Antwort und keine exakten 25% wünschen, können Sie die normale Zeilenanzahl auf einer Seite durch Teilen durch 25 ausrechnen und einige Systemzuordnungen festlegen. Wenn Sie zum Beispiel normalerweise ungefähr 100 Zeilen gleichzeitig auf einem Bildschirm haben, sind 25% davon 25 Zeilen, sodass Sie eine Tastenzuordnung für etwas wie Ihr Kapital J und K festlegen können, um schnell 25 Zeilen auf und ab zu bewegen

noremap J 25j
noremap K 25k

Wenn Sie nur zur Viertelmarke der gesamten Datei springen möchten, geben Sie im normalen Modus Folgendes ein:

25%
Gajit
quelle
1
Ich denke, Ihre Lösung hat zwei Nachteile: Wenn Sie beispielsweise ein 100-Zeilen-Fenster horizontal teilen und noremap J 25jden Wert fest codieren, 25navigiert Ihre Zuordnung tatsächlich zu 50% in den neuen Fenstern. Über Ihre zweite Option :25%wusste ich nicht, dass es sie gibt, aber nach meinen Tests scheint sie den Cursor auf eine Position zu setzen, die auf der ersten Zeile basiert: Wenn ich einen Puffer von 100 Zeilen habe und 25% vorwärts :25%gehen möchte, bringt mich die Eingabe in Zeile 25, egal wo mein Cursor war. Könnten Sie bitte auch das Hilfethema einfügen, in dem diese Funktion beschrieben wird. Ich kann sie nicht im Dokument finden.
statox
1
Ich fand das :h N%
Hilfethema unter