Puis-je accélérer le collage dans vim?


12

J'ai copié une partie du code HTML d'une page Web et je voulais l'enregistrer dans un fichier. Pour cela, j'ai commencé une nouvelle vim session dans une fenêtre de terminal, avec un (nouveau) nom de fichier spécifié sur la ligne de commande, appuyez sur ipour accéder au mode d'insertion, puis CtrlShift+ Vet j'ai attendu tout [-- INSERT --]affiché en bas et attendu ...

Comme vimil ne répondait pas après plusieurs secondes, j'ai ouvert «Éditeur de texte» dans le menu Applications → Accessoires, qui a collé le texte (qui s'est affiché en une fraction de seconde, l'a enregistré sous un nouveau nom, a fermé et a tué la session Vim qui 1,5 minute plus tard, le volume de texte était de 186K en 3200 lignes, pas excessif je dirais, ni avec des lignes trop longues.

Existe-t-il un moyen d'accélérer ce type d'insertions dans vimet / ou y a-t-il une explication pourquoi cela est si lent par rapport à l'utilisation de l'éditeur de texte, autrement horrible et orienté souris?

(Le% CPU selon topne dépasse pas 5%, bien que certains processeurs soient libres dans le système, il peut donc s'agir d'un problème lié aux E / S, qui n'existe pas lors de la lecture du même texte à partir d'un fichier)

Infos sur la version:
Ubuntu 12.04
Vim: 7.3, avec les correctifs fournis par Ubuntu 12.04
bash: 4.2.25
gnome-terminal: 3.4.1.1


1
Je pense que c'est lent b / c, il doit analyser l'entrée et essayer de la formater, etc. Je ne suis pas sûr de l'option pour le faire, mais je suppose que vous pouvez désactiver temporairement cette fonctionnalité w / in vim, faire le collage, puis réactivez-le. Essayez également d'utiliser la :set pastefonction pour voir si elle améliore les choses. Voir :help pasteil décrit comment vimne fait aucune distinction en tapant et collant en noir et blanc.
slm

Je m'attendrais vià essayer d'analyser le fichier lors de la lecture (après avoir enregistré la manière @ l0b0 suggérée) également. Mais ça marche vite.
Anthon

C'est vrai, mais j'imagine qu'il doit analyser tout ce qu'il a déjà analysé + le nouveau personnage lorsque vous le collez. Cela semble être ce qui se passe lorsque vous modifiez un fichier aussi, dans une certaine mesure.
slm

le :set pastene semble pas vraiment faire une différence (je ne suis pas avec un chronomètre, juste le mur-horloge).
Anthon

OK, c'était juste une pensée ...
slm

Réponses:


14

Pour enregistrer beaucoup de texte du presse-papiers dans un fichier rapidement, vous pouvez exécuter cat > file.txt, coller le contenu, puis appuyez sur Ctrl- d.

Si vous avez installé xsel , vous pouvez faire :r !xselpour insérer la sélection "primaire" (aka. "Souris") dans Vim, ou :r !xsel -bpour insérer le tampon "presse-papiers" ( Ctrl- c). Vous pouvez également enregistrer la sélection directement dans un fichier avec xsel >file.txtou xsel -b >file.txt. Cela supprime la nécessité de coller séparément + actions EOF et évite d'imprimer la totalité du tampon de copie dans le terminal.

Si vous n'avez pas xsel mais xclip, les commandes correspondantes xclip -outconcernent la sélection principale ou xclip -out -selection clipboardle tampon du presse-papiers.


1
Merci, cela fonctionne au moins sans avoir à revenir à la souris, et l'insertion du fichier dans vim (par exemple lorsque je ne commence pas avec un fichier vide) est assez rapide.
Anthon

Je ne comprends pas pourquoi cela ne peut pas être lié à ctrl + shift + v, cela n'a absolument aucun sens.
mchid

2

Il s'agit d'un problème de vidage de la mémoire tampon sur le disque. Vim essaie de protéger votre travail et ne suppose pas que vous pouvez taper plusieurs milliers de caractères par seconde. Lisez :help swap-filepour plus de détails sur la mise en mémoire tampon. La solution à votre problème est la suivante:

Désactivez le fichier d'échange de vim avec:

vim -n <your file>

ou depuis vim avant la pâte:

:set noswapfile

Voir :help swapfilepour plus de détails.

Une autre option consiste à simplement désactiver la synchronisation sur le disque du fichier d'échange avec :set swapsync=mais cette option prend plus de touches à annuler et je suis paresseux. :)

Désactiver l'échange n'est pas sûr pour les opérations normales! Immédiatement après le collage, utilisez :set swapfileou :set swapsync=fsyncpour revenir à un comportement normal (bien que techniquement, le comportement normal ait pu être sync et non fsync , vérifiez au :set swapsync?préalable si vous souhaitez suivre cette voie).


1
cela n'a pas accéléré les choses pour moi ...
elig

1

Si vous avez une xterm_clipboardfonctionnalité, vous pouvez utiliser les registres *et +. Ces registres s'interfacent avec le tampon de sélection principal X11 et le presse-papiers (respectivement).

Ainsi, si vous avez copié quelque chose via CTRL+ c, vous pouvez le coller dans vim avec "+p.

Si vous l'avez simplement mis en surbrillance sans le copier, vous pouvez le coller avec "*p.
Vous pouvez également faire du *tampon le tampon par défaut en faisant :set clipboard=unnamed. Ensuite, tout yank ( y), paste ( p), etc, qui ne spécifie pas de registre utilisera le *registre. Vim 7.3.74 a également été ajouté clipboard=unnamedplus, qui utilisera le +registre par défaut.

Vous pouvez également copier les choses dans les tampons primaires de sélection et presse - papiers par Emmener, par exemple: "+yy.

 

Notez que, comme mentionné, ces fonctionnalités ont toutes besoin de la xterm_clipboardfonctionnalité. Vous pouvez voir si vous avez cette fonctionnalité en faisant à l' :versionintérieur de vim, ou à vim --versionpartir du shell, et recherchez +xterm_clipboard. Si cela dit -xterm_clipboard, vous ne l'avez pas et vous devrez recompiler vim.


Je n'ai pas cette fonctionnalité. La recompilation aiderait-elle même si vim ne fonctionne pas sous xterm? (J'utilise gnome-terminal).
Anthon

@Anthon Si vous utilisez GUI VIM, je pense que les registres sont également activés. xterm_clipboardest uniquement si vous exécutez vim à partir du terminal.
Patrick

Il s'agit uniquement de texte, pas de GUI VIM, mais ne fonctionne pas depuis xterm.
Anthon

Oh, désolé d'avoir mal lu. Oui xterm_clipboards'applique à n'importe quel émulateur de terminal, pas seulement à xterm. J'utilise moi-même urxvt.
Patrick
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.