Quelle est la meilleure façon de faire un scrolling en douceur dans Vim?

les principales commandes de défilement dans Vim sont:

  1. Ctrl - B et Ctrl - F , ainsi que PageUp et PageDown arrêt en pleine page
  2. Ctrl - U et Ctrl - D faites défiler jusqu'à une demi-page par par défaut
  3. Ctrl - Y et Ctrl - E défiler une ligne

je perds chaque fois le contexte visuel pour les deux premiers, donc j'ai développé la mauvaise habitude de frapper le dernier ( Ctrl - Y et Ctrl - E ) de façon répétitive.

depuis il n'y a actuellement aucun support de première partie pour le scrolling en douceur, quels sont les workarounds/plugins les moins choquants?

j'utilise à la fois Vim et GVim en fonction de la tâche, et je suis heureux de les personnaliser séparément s'il n'y a pas vraiment un bon hack qui fonctionne pour les deux. La molette de défilement de la souris fonctionne bien dans GVim, mais je suis à la recherche de solutions basées sur le clavier.

65
demandé sur Keith Pinson 2010-10-31 22:12:01

8 réponses

Update : j'ai maintenant poussé ce code, remanié quelque peu selon les directives à :help write-plugin , à un GitHub repo .

utilisant le clavier

Voici ce que j'ai dans mon .vimrc :

function SmoothScroll(up)
    if a:up
        let scrollaction="^Y"
    else
        let scrollaction="^E"
    endif
    exec "normal " . scrollaction
    redraw
    let counter=1
    while counter<&scroll
        let counter+=1
        sleep 10m
        redraw
        exec "normal " . scrollaction
    endwhile
endfunction

nnoremap <C-U> :call SmoothScroll(1)<Enter>
nnoremap <C-D> :call SmoothScroll(0)<Enter>
inoremap <C-U> <Esc>:call SmoothScroll(1)<Enter>i
inoremap <C-D> <Esc>:call SmoothScroll(0)<Enter>i

Dispose:

  • Défilement sur la base de la Vim scroll option.
  • Vitesse de défilement personnalisable (ajuster l'argument de temps de la commande sleep ; j'utilise dix millisecondes). Note : tout comme ralentir la cadence d'image sur une vidéo, si vous ralentissez trop le scroll lisse, ce sera un scroll saccadé, pas un scroll lisse. Mais ce qui fonctionne le mieux pour vous.
  • fonctionne en mode normal ou insert.

Note : tous vous copiez-et-pasteurs, rappelez-vous que le Le caractère ^ indique un caractère de contrôle; copy-paste produira des résultats invalides et ceux-ci doivent être entrés manuellement!

  • ^Y CTRL - V puis Ctrl - Y
  • ^E CTRL - V puis Ctrl - E

cependant, les syntaxes de style <C-U> et <Enter> sont littéralement dactylographiées comme ces caractères; la commande map les convertit intelligemment en caractères de contrôle.

utilisant la souris

la question mentionne que le défilement avec la souris fonctionne bien dans GVim, mais une solution de clavier est souhaitée. Cela implique pour moi que l'asker peut être intéressé par une solution de souris si elle fonctionne dans le terminal régulier Vim.

pour moi, tourner le support de la souris permet de faire défiler la souris en douceur. En outre, pour moi, le défilement en douceur est plus important lorsque je regarde autour de moi (c.-à-d. en mode normal), pas lorsque je édite (en mode insertion), et si Je ne édite pas activement, la nécessité pour mes mains de rester sur le clavier à tout moment est supprimée, donc cela fonctionne bien.

Sur la base de cette question , cependant, il semblerait que certains les gens doivent faire un peu plus de configuration manuelle au-delà de simplement tourner la souris (je viens d'utiliser set mouse=n ):


Mon .vimrc a les lignes suivantes

 set mouse=a
 map <ScrollWheelUp> <C-Y>
 map <ScrollWheelDown> <C-E>

28
répondu Keith Pinson 2017-05-23 12:34:21

il y a un simple hack remap dans les bouts de vim.txt:

Smooth scrolling                    *scroll-smooth*

If you like the scrolling to go a bit smoother, you can use these mappings:

    :map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
    :map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
7
répondu Andrew Wagner 2010-10-31 19:28:06

Un Plugin Récent

j'ai posté quelque chose de similaire ici , mais fondamentalement il y a un grand plugin que nous pouvons utiliser maintenant pour le défilement, appelé terryma/vim-smooth-scroll . Il offre un défilement très agréable et lisse.


l'installation est assez simple:

1 j'utilise Vundle donc j'ai simplement ajouté ceci dans .vimrc.paquets :

Bundle terryma/vim-smooth-scroll

dans la dernière version de Vundle disponible aujourd'hui, 29 avril 2016, vous pouvez le mettre dans votre .vimrc :

Plugin 'terryma/vim-smooth-scroll'

2 comme indiqué dans le doc, vous pouvez configurer 3 arguments: distance , durée et vitesse .

j'utilise ceci dans mon .vimrc fichier:

noremap <silent> <c-b> :call smooth_scroll#up(&scroll*2, 10, 4)<CR>
noremap <silent> <c-f> :call smooth_scroll#down(&scroll*2, 10, 4)<CR>
6
répondu Mick 2017-05-23 11:47:01

ce n'est pas vraiment un défilement en douceur, mais c'est comme ça que je gère le fait de ne pas perdre de contexte en sautant des pages.

, afin que le=7

' scrolloff '' ' so ' nombre (par défaut 0) global

{absent de Vi}

Nombre Minimal de lignes d'écran à maintenir au-dessus et au-dessous du curseur. Cela rendra le contexte visibles autour de l'endroit où vous travaillez. Si vous définissez une valeur très élevée (999) de la ligne du curseur sera toujours dans le milieu de la fenêtre (sauf au début ou à la fin d'un fichier ou lorsque les longues lignes enveloppent). Pour défiler horizontalement, voir "sidescrolloff". NOTE: Cette option est définie à 0 lorsque 'compatible' est défini.

3
répondu DevinDawson 2010-11-01 02:38:14

ce que je fais c'est Régler la répétition du clavier à très rapide, environ 120 caractères / seconde, et le délai petit. Puis je carte à 4j et à 4k Je navigue de haut en bas du code source en utilisant j et k qui déplace le curseur de haut en bas joli et rapide, assez lisse. Mais voici la bonne partie, et cela fonctionne sur Linux, Windows. Depuis un certain nombre d'années maintenant, l'entrée de clavier de X11 fonctionne de telle manière que lorsque vous appuyez et maintenez j il commence évidemment à sortir des caractères J. Mais si l'on tient à en bas de j puis appuyez également sur la touche ctrl, X11 commence à sortir des caractères c-j sans que vous ayez à appuyer de nouveau sur la touche J. Puis, lorsque vous relâchez la touche ctrl et que vous appuyez encore sur j, X11 continue de mettre des j à nouveau. Donc j fait que le curseur commence à bouger bien et lisse vers le bas, et vous pouvez périodiquement frapper ctrl sans lâcher de j pour lui donner un coup de pouce, une secousse.

aussi, je fais ce que Devin fait, et je mets scrolloffset à 5.

enfin, j'échange ctrl et le capuchon de verrouillage. La position par défaut de la touche ctrl est complètement retardée (sans intention d'offense). Il vous oblige à tourner votre main gauche. Je n'utilise presque jamais caps lock, donc je les Échange. Puis mon doigt rose gauche peut atteindre la touche ctrl sans aucun mouvement de yoga.

Ces choses ont fonctionné pour moi pendant des années. Je n'utilise que vim, jamais gvim.

3
répondu Mike 2010-12-01 03:27:49

fiche éhontée, mais j'ai créé un plugin ici que vous pouvez utiliser pour ajuster facilement la distance, la vitesse et la durée de l'animation de défilement: https://github.com/terryma/vim-smooth-scroll

2
répondu terryma 2013-04-05 07:39:20

le Plugin cskeeters/vim-smooth-scroll supporte le défilement en douceur et ne nécessite aucune configuration. Il soutient pour soutenir le défilement lisse avec zt , zz , et zb . C'est une fourchette de terryma's plugin . Certaines des requêtes open pull ont été appliquées.

1
répondu Chad Skeeters 2016-12-21 16:33:53

je viens de trouver ce plugin appelé" accéléré-smooth-scroll "("vim plugin for accelerated smooth scroll (mapping to <C-D>/<C-U> , <C-F>/<C-B>) ") qui peut être utilisé par exemple à travers Vundle en mettant cette ligne dans votre .vimrc:

Plugin 'yonchu/accelerated-smooth-scroll'

puis en redémarrant Vim et en lançant la commande :PluginInstall , puis à nouveau redémarrer Vim et utiliser le <C-D> ( Ctrl+d ) et <C-O> ( Ctrl+O ) commandes normalement.

malheureusement, ce plugin déplace aussi le curseur au lieu de ce que je voulais: faire défiler l'écran comme les commandes <C-E> et <C-Y> .

0
répondu silviubogan 2016-04-29 19:29:49