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 vim
il 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 vim
et / 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 top
ne 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
vim
, faire le collage, puis réactivez-le. Essayez également d'utiliser la:set paste
fonction pour voir si elle améliore les choses. Voir:help paste
il décrit commentvim
ne fait aucune distinction en tapant et collant en noir et blanc.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.:set paste
ne semble pas vraiment faire une différence (je ne suis pas avec un chronomètre, juste le mur-horloge).Réponses:
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 !xsel
pour insérer la sélection "primaire" (aka. "Souris") dans Vim, ou:r !xsel -b
pour insérer le tampon "presse-papiers" ( Ctrl- c). Vous pouvez également enregistrer la sélection directement dans un fichier avecxsel >file.txt
ouxsel -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 -out
concernent la sélection principale ouxclip -out -selection clipboard
le tampon du presse-papiers.la source
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-file
pour 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:
ou depuis vim avant la pâte:
Voir
:help swapfile
pour 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 swapfile
ou:set swapsync=fsync
pour 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).la source
Si vous avez une
xterm_clipboard
fonctionnalité, 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_clipboard
fonctionnalité. Vous pouvez voir si vous avez cette fonctionnalité en faisant à l':version
intérieur de vim, ou àvim --version
partir du shell, et recherchez+xterm_clipboard
. Si cela dit-xterm_clipboard
, vous ne l'avez pas et vous devrez recompiler vim.la source
xterm_clipboard
est uniquement si vous exécutez vim à partir du terminal.xterm
.xterm_clipboard
s'applique à n'importe quel émulateur de terminal, pas seulement à xterm. J'utilise moi-même urxvt.