8 votes

Abandonner un collage vim

Il m'arrive de coller beaucoup de données dans vim (>5000 lignes) et d'oublier d'activer le mode collage. Dans ce cas, vim est occupé pendant plusieurs minutes, essayant d'indenter correctement tout le texte (ce qui devient VRAIMENT mauvais en termes de performance avec certains types de données, les indentant de quelques 10'000 caractères).

Existe-t-il un moyen d'interrompre le processus de collage ? ESC, CTRL-C et CTRL-D ne fonctionnent pas.

6voto

Si vous utilisez la version GUI, vous devriez vraiment coller depuis le registre du presse-papiers ( "* ) ou la sélection X11 ( "+ ), comme l'a déjà suggéré echristopherson. Ainsi, au lieu de faire un clic moyen ou autre, vous naviguez à l'endroit où vous voulez coller et vous tapez "*P , y compris la citation initiale. Lors du collage via le p o P vim sait que vous collez, d'où l'utilisation de la commande 'paste est inutile, quel que soit le registre à partir duquel vous collez.

Si vous collez à partir du terminal, vim n'a pas vraiment son mot à dire. L'émulateur de terminal déchargera tout ce que vous lui avez demandé et, dans la plupart des cas, vim ne peut pas différencier si les caractères qui continuent à entrer sont ceux que vous tapez ou ceux que vous collez. C'est pourquoi vous devez définir 'paste pour dire à vim qu'il ne doit pas faire d'indentation et autres.

Par conséquent, si vous collez à partir du terminal, tous les caractères à coller sont mis en file d'attente en une seule fois et sont déjà envoyés à vim, il n'y a donc rien que vous puissiez faire pour l'interrompre. Du point de vue de l'émulateur de terminal, CTRL + c n'est qu'un caractère ordinaire, il est donc mis en file d'attente derrière toutes les autres choses qui attendent d'être collées. Lorsque vim voit enfin le caractère CTRL + c il est trop tard, car il n'y a plus rien à avorter.

( Mise à jour : Selon l'émulateur de terminal, CTRL + c et des signaux similaires mai être envoyés de manière prioritaire. Plus précisément, j'ai remarqué cela dans Putty, qui délivre le signal de rupture instantanément et me permet d'annuler les longues opérations de collage mal placées. Je ne sais pas vraiment comment cela fonctionne, cependant. )


Pour faire court : si possible, utiliser "*P o "+P pour coller (ce qui fonctionne même dans certains émulateurs de terminal si je me souviens bien). C'est la façon "correcte" de coller ; tout le reste est essentiellement une solution de rechange qui vous donne ce genre de maux de tête.

0voto

Robert L. Points 1239

J'ai accidentellement collé depuis tmux au lieu de coller depuis le buffer de vim, et il se trouve que tmux contenait des milliers de lignes de log que j'avais copiées pour autre chose. Sans être en mode collage, vim avançait à environ 2 lignes par seconde, ce qui aurait pris des heures.

ctrl+c n'a eu aucun effet comme prévu. J'ai pris le risque d'utiliser kill pour envoyer un SIGINT au processus vim. Ça a vraiment marché ! Un tas de texte a défilé sur la barre inférieure trop rapidement pour être lu, puis j'ai repris le contrôle, avec seulement quelques centaines de lignes collées.

J'ai pu reproduire cela de manière cohérente, mais je ne peux pas trouver ce comportement documenté nulle part.

Le code source de vim révèle ce qui se passe. Il semble que le gestionnaire va définir un got_int qui, selon un commentaire, "casse toutes les boucles". En cherchant d'autres références à got_int J'ai trouvé une section qui lit le flux de caractères, qui fait une pause entre les lectures pour vérifier si got_int a été défini, et rompre si c'est le cas : https://github.com/vim/vim/blob/master/src/os_unix.c#L5217

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X