79 votes

Quelle est la meilleure façon de le faire défilement lisse dans Vim?

Les principales commandes de défilement dans Vim sont:

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

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

Comme il n'existe actuellement pas de première partie de support pour un défilement fluide, ce sont les moins répréhensible que des solutions de contournement/plugins?

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'est pas vraiment bon hack qui fonctionne pour les deux. La molette de la souris fonctionne très bien dans GVim, mais je suis à la recherche d'un clavier de solutions fondées.

39voto

Kazark Points 2453

Mise à jour: j'ai maintenant mis ce code, refactoring quelque peu selon les lignes directrices à l' :help write-plugin, pour un dépôt Github.

À l'aide du Clavier

Voici ce que j'ai dans ma .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

Caractéristiques:

  • Faites défiler sur la base de la Vim scroll option.
  • Personnalisable la vitesse de défilement (régler l'heure de l'argument de l' sleep commande; je l'utilise dizaines de millisecondes). Remarque: tout comme le ralentissement de la cadence sur une vidéo, si de ralentir le défilement fluide trop il sera de défilement saccadé, pas de défilement fluide. Mais ce qui fonctionne le mieux pour vous.
  • Fonctionne en mode normal ou en mode insertion.

Remarque: tout ce que vous copiez-et-dérouleurs, rappelez-vous que l' ^ caractère indique un caractère de contrôle; copier-coller va produire des résultats non valides et doivent être entrées manuellement (avec CTRL-V)!

  • ^YCTRL-Y
  • ^ECTRL-E

Cependant, l' <C-U> et <Enter> style de syntaxe sont littéralement tapé comme ces personnages; la carte de commande intelligemment les convertit un caractère de contrôle.

À l'aide de la Souris

La question mentionne que le défilement avec la souris fonctionne bien dans GVim, mais un clavier solution est souhaitée. Cela implique, pour moi, que le demandeur peut être intéressé par une souris solution, si elle travaille régulièrement terminal de Vim.

Pour moi, en tournant le support de la souris sur lisse permet de faire défiler la molette de la souris. Aussi, pour moi, le défilement doux est le plus important quand je suis à la recherche autour (c'est à dire en mode normal), pas quand je suis d'édition (en mode insertion), et si je ne suis pas activement l'édition, le besoin de mes mains pour rester sur le clavier à tout moment est retiré, de sorte que cela fonctionne bien.

Sur la base de cette question, cependant, il semblerait que certaines personnes ont à faire un peu plus manuel d'installation au-delà de simplement en tournant le bouton de la souris (je viens de l'utiliser set mouse=n):


Mon .vimrc a les lignes suivantes

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

11voto

Andrew Wagner Points 1958

Il suffit de reconfigurer le hack dans vim est tips.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>

7voto

Patt Points 5838

Une Récente Plugin

J'ai posté quelque chose de semblable ici, mais, fondamentalement, il est un excellent plugin que nous pouvons utiliser maintenant pour le défilement, appelé terryma/vim-lisse de défilement. Il offre un très beau et lisse de défilement.


L'installation est très facile:

1 - je utiliser Vundle j'ai donc simplement ajouté cette dans .vimrc.faisceaux :

Bundle terryma/vim-smooth-scrolling

2 Comme indiqué dans la doc, vous pouvez définir jusqu'à 3 arguments: la distance, la durée et la vitesse.

Je me sers de ce 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>

4voto

Mike Points 746

Ce que je fais c'est de définir la répétition du clavier à très rapide, environ 120 caractères / seconde, et le retard de petite taille. Ensuite, j'ai la carte de 4j et à 4k Je naviguez vers le haut et vers le bas le code source à l'aide de j et k qui déplace le curseur vers le haut et vers le bas agréable et rapide, assez lisse. Mais voici la bonne partie, et cela fonctionne sur Linux, Windows. Pour un certain nombre d'années maintenant, X11 est entrée au clavier fonctionne de telle manière à ce que lorsque vous appuyez sur la touche et maintenez-j, il commence évidemment à mettre hors j caractères. Mais quand vous gardez alors maintenant j et puis aussi appuyer sur la touche ctrl, X11 commence à mettre de c-j caractères sans avoir à ré-appuyez sur la touche j. Ensuite, lorsque vous relâchez la touche ctrl et de toujours garder sur la touche j, X11 continue à mettre la j de nouveau. Donc j rend le curseur commencer à se déplacer de nice et lisse vers le bas, et vous pouvez périodiquement appuyez sur ctrl sans lâcher j pour lui donner un coup de pouce, une secousse.

Aussi, je fais ce que Devin n', et j'ai mis scrolloffset à 5.

Enfin, je swap ctrl et le capuchon de verrouillage. La position par défaut de la touche ctrl est complètement attardé (pas de délit prévu). Il fait que vous devez faire pivoter votre main gauche. Je n'ai presque jamais utiliser le verrouillage des majuscules, donc je les échanger. Alors ma gauche rose doigt peut atteindre la touche ctrl enfoncée, sans mouvements de yoga.

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

3voto

DevinDawson Points 21

Ce n'est pas exactement le défilement régulier, mais c'est la façon dont je gère pas perdre contexte en sautant des pages.

ensemble donc=7

'scrolloff' 'donc' nombre (défaut 0) mondial
{absent de Vi}
Nombre Minimal de lignes d'affichage de garder 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 de longues lignes à la ligne). Pour faire défiler horizontalement voir "sidescrolloff'. REMARQUE: Cette option est définie sur 0 lorsque 'compatible' est fixé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X