Coller à partir du presse-papiers et activant automatiquement “:set paste”
Quand j'ai coller des éléments du presse-papiers, ils sont normalement (toujours) multilined, et dans ces cas (et dans les cas seulement), j'aimerais :set paste
être déclenché, car, autrement, la tabulation augmentent avec chaque ligne (vous l'avez tous vu!).
Bien que le problème avec :set paste
est qu'il ne se comporte pas bien avec set smartindent
, provoquant le curseur pour sauter au début d'une nouvelle ligne au lieu de la corriger en retrait. Donc je voudrais l'activer pour cette instance.
Je suis sous Mac, sshing à une machine Debian avec Vim, et donc le coller dans le mode d'Insertion à l'aide de cmd + v.
Je ne pense pas qu'il n'y a aucune raison de migrer à cette question: non seulement vim questions reconnus comme appartenant à ( meta.stackexchange.com/questions/25925/vim-questions-so-or-su ), c'est une question à propos d'un programmeur de l'éditeur de texte utilisé pour effectuer une tâche qui est commun lors de la programmation.
Le collage est commun lors d'un formulaire d'édition de texte, mais j'admets que Vim/Emacs questions ont été jugés acceptables, de SORTE que même quand ils ne sont pas directement les programmes relatifs. @Jonatan: je recommande vivement contre l'utilisation de
Le point est que le collage avec cette mise en forme spécifique préoccupation est une très, très commune de la tâche de programmation. Nulle part ailleurs-t-on systématiquement coller des blocs de texte avec retrait variant ligne-à-ligne.
Le collage est commun lors d'un formulaire d'édition de texte, mais j'admets que Vim/Emacs questions ont été jugés acceptables, de SORTE que même quand ils ne sont pas directement les programmes relatifs. @Jonatan: je recommande vivement contre l'utilisation de
'smartindent'
. Voir vim.wikia.com/wiki/... pour une explication de pourquoi.Le point est que le collage avec cette mise en forme spécifique préoccupation est une très, très commune de la tâche de programmation. Nulle part ailleurs-t-on systématiquement coller des blocs de texte avec retrait variant ligne-à-ligne.
OriginalL'auteur Jonatan Littke | 2010-03-31
Vous devez vous connecter pour publier un commentaire.
Je n'utilise pas un mac, mais je crois que j'ai le préfixe ici:
<D-v>
devrait signifier cmd-v Pour le mode insertion:ou vraiment, il suffit de faire ceci:
Le ^O et ^R littéral de contrôle-S et de contrôle-R, vous pouvez taper avec ^V^O (ctrl-v ctrl-o) et ^V^R (ctrl-v ctrl + r). Contrôle-O en mode insertion vous permet d'exécuter une commande, puis revenir en mode insertion; ici, vous pouvez l'utiliser pour placer dans le presse-papiers vous inscrire.
Cela a fonctionné pour moi quand je les ai testés mappé à une clé différente, de sorte que vous devriez être tous ensemble.
Il n'y a pas besoin de carte rien lorsqu'il n'est pas en mode insertion; vous pouvez simplement utiliser
"+p
."+p
... selon votre système d'exploitation, vous devrez peut-être modifier que pour"*p
. Pour mon ordinateur (mac osx) j'avais besoin d'utiliser la deuxième version.OriginalL'auteur Cascabel
J'ai la suite dans ma .vimrc:
gi
est pour démarrer le mode d'insertion dans la même position que lorsque le mode d'insertion a été arrêté pour la dernière fois dans le tampon courant.Mise à jour:
Jefromi posté une meilleure solution. J'ai bricolé un peu
Il insère un texte du presse-papiers et place le curseur juste après.
Il pourrait être facilement associées à tout ce que vous préférez. <F5> par exemple.
Littke: Ma réponse montre comment cette carte de commande-v, et comment le faire de manière plus efficace.
2Jefromi: Ressemble au votre, la dernière version est mieux. thx
OriginalL'auteur Maxim Kim
Vous avez raison dans ce que vous ne devez activer
'paste'
quand vous en avez besoin. Il ne se contente pas affecter la mise en retrait. Vous pouvez lire tout ce qu'il touche dans sa la documentation. Une option qui est très utile pour faciliter l'utilisation de'paste'
est 'pastetoggle'.Si vous utilisez X-forwarding et un terminal qui peut communiquer correctement les actions de la souris, vous pouvez aussi profiter de la 'souris' option. Avec
:set mouse=a
, Vim est mis au courant de ce que la souris est en train de faire et, par conséquent, de ne pas accomplir automatique de mise en retrait lorsqu'il reçoit un multi-ligne-coller via un bouton du milieu de la souris cliquez sur.Même sans la souris capacité, X-forwarding pourrait aider parce que Vim va faire la même chose quand manuellement coller à partir du presse-papiers ou selection des registres (
"+
et"*
respectivement).OriginalL'auteur jamessan
Cela devrait être possible avec un script Vim. (Je déteste Vim script, de sorte qu'il aurait à être beaucoup plus grave infligé à me forcer à le résoudre moi-même.) Même avec iTerm2 est "coller lentement" mode, la valeur par défaut est de briser les données à être collé dans 16 octets morceaux et envoyer un chaque de 0,125 secondes. Par conséquent, vous devriez être en mesure de détecter par programmation un 16 octets du bloc de "frappes" et de faire quelque chose à ce sujet.
En pseudo-code qui pourrait ressembler à:
Il y a des faiblesses, mais cela fonctionne pour la plupart des cas.
OriginalL'auteur Bruno Bronosky