vim: Puis-je faire * seulement * y effectuer une copie?


11

J'apprends à aimer vim, mais une chose que je n'ai pas encore complètement embrassée est la situation du copier-coller. Dans un éditeur de texte moldu, je voudrais Ctrl- Ccopier un morceau de texte, puis éditer / supprimer, puis coller le texte ailleurs. Cependant, dans vim, je ne peux pas le faire car après avoir copié du texte avec y, la modification du texte implique souvent det xqui efface mon texte d'origine.

Existe-t-il un moyen de créer det xnon de copier le texte? Ou sinon, comment dois-je utiliser ces fonctionnalités vim?

Réponses:


16

Les 9 Yanks précédents sont enregistrés dans les registres appelés 1par 9. Vous pouvez rappeler l'avant-dernier coup sec avec "1p, le précédent avec "2pet ainsi de suite. La commande :regaffiche les registres disponibles pour le collage.

Si vous voulez qu'un coup sec dure plus longtemps, utilisez un registre de lettres .

Pour les commandes plus obscures liées à yank, commencez à lire :help "dans le manuel.


2
En outre, le registre 0 contient le dernier texte retiré (par opposition à supprimé). Donc, en vous référant à la question d'origine, vous pouvez tirer avec y, continuer à éditer y compris det x, et coller le texte tiré avec"0p
Nefrubyr

@Nefrubyr, votre commentaire ci-dessus est en fait la réponse la plus simple, mais il n'est mentionné dans aucune des trois réponses existantes. Vous devriez peut-être l'ajouter? (Je peux si vous ne le faites pas.)
Wildcard

9

Les commandes dont vous parlez utilisent le registre dit "sans nom". Il est destiné uniquement à une utilisation à très court terme. "Je vais arracher ça d'ici et le mettre là-bas" genre de choses.

Lorsque vous souhaitez conserver quelque chose pendant plus de quelques secondes pendant que vous allez faire autre chose, vous devez utiliser des registres nommés.

Par exemple, " a y ytirera la ligne sur laquelle se trouve le curseur dans le aregistre. Rien ne va le bouleverser accidentellement, sauf si vous tapez une autre commande impliquant le aregistre. " a pQuelques minutes, heures, voire jours plus tard, vous pouvez taper pour supprimer cette copie de la ligne tirée du aregistre en dessous de celle sur laquelle se trouve le curseur.

(Pour que cela fonctionne vraiment bien, vous devriez avoir une ligne comme set viminfo='50,\"1000dans votre ~/.vimrcfichier, pour lui dire de se rappeler des choses comme enregistrer le contenu à travers les sessions Vim. Vous pouvez ensuite partir en vacances entre yank et put!)

Il existe 26 registres nommés (az). Si vous les donnez en majuscules au lieu de comme indiqué ci-dessus, vous les ajoutez au contenu du registre actuel au lieu de les remplacer. Ainsi, vous pouvez créer quelque chose de vraiment complexe, par exemple, enregistrer hune pièce à la fois, puis tout replier à la fois avec " h p.

Notez que le nom du registre est facultatif. Cela implique qu'il peut y avoir de nombreuses commandes que vous connaissez et utilisez déjà où vous pourriez utiliser des registres nommés. Dites :help registersà Vim pour avoir une idée des possibilités.

En outre, obtenir une tasse Vi .


1

Si vous devez supprimer du texte avec d sans modifier votre registre de tirage (par exemple, vous y avez déjà tiré du texte que vous n'êtes pas prêt à coller avant de supprimer un autre texte par exemple), vous pouvez utiliser le registre de trou noir _ .

Si vous le faites "_ddpar exemple, la ligne actuelle sera immédiatement supprimée et oubliée.

En fait, je n'utilise pas ce registre très souvent. Cela ne prend pas moins de touches que d'enregistrer dans un registre à usage général (n'importe quel registre de lettres) et si vous enregistrez dans un registre à usage général, au moins, les lignes que vous avez supprimées sont toujours disponibles jusqu'à ce que vous écrasiez le registre, si le besoin s'en fait sentir.

Si vous avez tendance à oublier d'utiliser un autre registre lors de la suppression, vous pouvez définir une macro wrapper pour , ddpar exemple , comme ceci: :noremap dd "add.


0

Comme cela a été souligné dans les commentaires sur la réponse acceptée (actuelle), la manière canonique de procéder consiste à utiliser le registre zéro ( "0). Le registre zéro contient toujours le dernier coup sec, et ne sera pas écrasé par det x, "0pmet donc toujours ce que vous avez tiré indépendamment de ce qui a été modifié entre-temps.

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.