Faites défiler un quart (25%) de l'écran vers le haut ou vers le bas

15

Je trouve souvent que faire défiler une page entière est trop désorientant, une demi-page trop, mais un quart de page est juste. Je le fais actuellement simplement en maintenant enfoncées les touches fléchées.

Comment faire défiler 25% de la page vers le bas et vers le haut facilement?

Louis Hong
la source
1
vérifiez la fonction barrée dans cette réponse: stackoverflow.com/a/3102890
Sundeep

Réponses:

20

Peut ctrld- être et ctrlupourrait être ce que vous recherchez. Par défaut, ils déplacent la moitié de l'écran.

De :h CTRL-D:

Faites défiler la fenêtre vers le bas dans le tampon. Le nombre de lignes provient de l'option 'scroll' (par défaut: un demi-écran).

Si [count] est donné, définissez d'abord l'option 'scroll' sur [count].

Ce qui signifie que la première fois que vous voulez faire défiler une fenêtre, vous pouvez faire XXctrldoù XX est le 25% du nombre de lignes de votre fenêtre. Comme il définit scrollla valeur XX, vous pouvez ensuite utiliser ctrldet ctrlupour déplacer 25% de l'écran.

De plus, je pense que cela :h scrollingpourrait être intéressant pour vous.


Éditer

Et voici une autre solution avec une fonction et quelques mappages à ajouter à votre .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>

La fonction obtiendra la hauteur de la fenêtre actuelle et, en fonction de son paramètre, fera défiler l'écran vers le haut ou vers le bas d'un quart de la hauteur.

Les mappages appellent la fonction, la première à monter et la seconde à descendre.

Bien sûr, vous pouvez modifier <up>et <down>utiliser d'autres touches si vous souhaitez conserver le comportement par défaut de vos touches fléchées.

statox
la source
2
Il semble que cela pourrait avoir plus de sens à utiliser ctrl-Eet ctrl-Ydans les mappages, car a). vous disposez alors de raccourcis distincts pour le défilement 1/2 page et 1/4 page. b). le comportement de ctrl-U/ ctrl-Dest cohérent et ne dépend pas de si vous avez déjà utilisé le mappage.
Rich
Je ne comprends pas votre note importante. Que voulez-vous dire saisir manuellement? Actuellement, cette option supprime une ligne au lieu de déplacer la page.
Louis Hong
@LouisHong Voir la ligne dont let key="^U"la partie entre les guillemets doubles est censée représenter le code clé de ctrl+u. Donc, si vous avez copié la fonction dans vim, placez votre curseur sur le premier hit ci"de double guillemet pour modifier le contenu des guillemets, puis frappez ctrl+vsuivi ctrl+ude la même chose sur la ligne let key="^D".
statox
@Rich: Oui c'est un bon point. J'ai utilisé les touches fléchées parce que c'est ce que OP a dit qu'il a utilisé, mais votre point est pertinent.
statox
@statox Vous m'avez mal compris! (Je n'étais pas clair). Je voulais dire utiliser let key="^Y"au lieu de let key="^U". Cela créera le même comportement mais sans affecter le 'scroll'paramètre.
Rich
3

Vous pouvez utiliser ctrleet ctrlypour déplacer la page d'une ligne vers le haut et vers le bas.

Ensuite, si vous souhaitez 20ctrledéplacer +/- 25%, vous pouvez utiliser et cela vous fera descendre de 20 lignes.

Voici également une bonne question expliquée qui est similaire à la vôtre: /programming/3458689/how-to-move-screen-without-moving-cursor-in-vim

A. Dziedziczak
la source
3

J'ai varié l' approche statox pour qu'elle défile de manière plus cohérente sur les retours à la ligne. Si vous voulez un quart de pas, remplacez 0,618 par 0,25 ou autre.

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
la source
0

Si vous voulez une bonne réponse générale et non pas un 25% exact, vous pouvez factoriser le nombre de lignes normales sur une page en divisant par 25 et définir des mappages système. Par exemple, si vous avez normalement environ 100 lignes sur un écran à la fois, 25% de ce nombre est de 25 lignes afin que vous puissiez définir un mappage de touches sur quelque chose comme votre J et K majuscule pour vous déplacer rapidement de haut en bas de 25 lignes

noremap J 25j
noremap K 25k

Si vous voulez simplement sauter au quart de point du fichier entier, alors en mode normal, tapez simplement:

25%
Gajit
la source
1
Je pense qu'il y a deux inconvénients avec votre solution: noremap J 25jcoder en dur la valeur 25ainsi lorsque, par exemple, vous divisez horizontalement une fenêtre de 100 lignes, votre mappage naviguera en fait à 50% des nouvelles fenêtres. À propos de votre deuxième option, :25%je ne savais pas qu'elle existait, mais d'après mes tests, il semble qu'elle place le curseur sur une position basée sur la première ligne: si j'ai un tampon de 100 lignes et que je veux avancer de 25%, la frappe :25%m'apportera à la ligne 25, peu importe où se trouvait mon curseur. Pourriez-vous également mettre la rubrique d'aide décrivant cette fonctionnalité que je ne trouve pas dans le document?
statox
1
J'ai trouvé la rubrique d'aide sur :h N%:-)
statox