Comment utiliser les registres vim?

Je ne connais qu’une instance utilisant des registres via Ctrl R * où je colle du texte depuis un presse-papiers.

Quelles sont les autres utilisations des registres? Comment les utiliser?

Tout ce que vous savez sur les registres VI (concentrons-nous sur vi 7.2) – partagez avec nous.

Les registres dans Vim vous permettent d’exécuter des actions ou des commandes sur du texte stocké en leur sein. Pour accéder à un registre, vous tapez "a avant une commande, où a est le nom d’un registre. Si vous souhaitez copier la ligne actuelle dans le registre k , vous pouvez taper

“Kyy

Ou vous pouvez append à un registre en utilisant une majuscule

“Kyy

Vous pouvez ensuite parcourir le document et le coller ailleurs en utilisant

“kp

Pour coller depuis le presse-papiers du système sous Linux

“+ p

Pour coller depuis le presse-papiers du système sous Windows (ou depuis le presse-papiers “surlignage de souris” sous Linux)

“* p

Pour accéder à tous les types de registres actuellement définis

: reg

J’ai été ravi de découvrir le registre 0 . Si vous retirez du texte sans l’assigner à un registre particulier, il sera assigné au registre 0 , tout en étant enregistré dans le registre par défaut. La différence entre les registres 0 et " est que 0 est uniquement rempli avec du texte extrait. , alors que le registre par défaut est également rempli avec du texte supprimé à l’aide des commandes d / D / x / X / c / C / s / S

Je trouve cela utile lorsque je veux copier du texte, supprimer quelque chose et le remplacer par le texte copié. Les étapes suivantes illustrent un exemple:

  • Yank le texte que vous voulez copier avec y[motion] – ce texte est enregistré dans " et 0 registres
  • Supprimez le texte que vous souhaitez remplacer par d[motion] – ce texte est enregistré dans " register
  • Collez le texte avec "0p

where " est la commande pour utiliser un registre pour la commande suivante.

Lors de la dernière étape, si vous deviez coller à partir du registre par défaut (avec p ), il faudrait utiliser le texte que vous venez de supprimer (probablement pas ce que vous vouliez).

Notez que p ou P colle du registre par défaut. L’équivalent longhand serait ""p (ou ""P ) et "0 contient le dernier yank "1 contient la dernière suppression ou modification.

Pour plus d’informations, voir :help registers .

Une de mes parties préférées sur les registres les utilise comme macros!

Disons que vous avez affaire à un fichier de valeurs délimité par des tabulations en tant que tel:

 ID Df %Dev Lambda 1 0 0.000000 0.313682 2 1 0.023113 0.304332 3 1 0.044869 0.295261 4 1 0.065347 0.286460 5 1 0.084623 0.277922 6 1 0.102767 0.269638 7 1 0.119845 0.261601 

Maintenant, vous décidez que vous devez append un signe de pourcentage à la fin du champ% Dev (à partir de la 2ème ligne). Nous allons créer une macro simple dans le registre m (choisi arbitrairement) comme suit:

  1. Appuyez sur: qm : pour commencer à enregistrer une macro sous m enregistrer.

  2. EE : Allez à la fin de la 3ème colonne.

  3. a : Mode d’insertion à append à la fin de cette colonne.

  4. % : Tapez le signe de pourcentage que vous souhaitez append.

  5. : Revenez en mode commande.

  6. j0 : Aller au début de la ligne suivante.

  7. q : arrête l’enregistrement de la macro

Nous pouvons maintenant taper simplement @m pour exécuter cette macro sur la ligne actuelle. De plus, nous pouvons taper @@ pour répéter ou 100@m pour le faire 100 fois! La vie a l’air plutôt bien.

À ce stade, vous devriez dire: ” MAIS ATTENDRE CE QUE LE HECK DOIT FAIRE AVEC LES REGISTRES ?”

Excellent point Examinons ce qu’il y a dans le contenu du registre m en tapant "mp . Nous obtenons ensuite ce qui suit:

 EEa%j0 

Au premier abord, il semble que vous ayez accidentellement ouvert un fichier binary dans le bloc-notes, mais au second regard, c’est la séquence exacte des caractères de notre macro!

Vous êtes une personne curieuse, alors faisons quelque chose d’intéressant et éditez cette ligne de texte pour insérer un ! au lieu de chier vieux % .

 EEa!j0 

Ensuite, tirons ceci dans le registre n en tapant B"nyE . Ensuite, juste pour les coups de pied, B"nyE la macro n sur une ligne de nos données en utilisant @n ….

OMG, IL AJOUTE A !

Essentiellement, l’exécution d’une macro revient à appuyer sur la séquence exacte des clés dans le registre de cette macro. Si ce n’est pas un truc cool, je mangerai mon chapeau.

Autres registres utiles:

"* ou "+ – le contenu du presse-papiers du système

"/ – dernière commande de recherche

": – dernière commande.

Notez qu’avec les macros vim, vous pouvez les modifier, car elles ne sont qu’une liste des séquences de touches utilisées lors de l’enregistrement de la macro. Vous pouvez donc écrire dans un fichier texte la macro (en utilisant "ap pour écrire la macro a ) et les éditer, et les charger dans un registre avec "ay$ . Bon moyen de stocker des macros utiles.

Le registre de trous noirs _ est le registre /dev/null des registres.

Je l’utilise dans mon vimrc pour permettre de supprimer des caractères uniques sans mettre à jour le registre par défaut:

 noremap x "_x 

et coller en mode visuel sans mettre à jour le registre par défaut:

 vnoremap p "_dP 

Si vous souhaitez un jour coller le contenu du registre dans une commande ex-mode, appuyez sur .

Pourquoi utiliseriez-vous cela? Je voulais faire une recherche et remplacer une chaîne longue, donc je l’ai sélectionnée en mode visuel, j’ai commencé à taper l’expression de recherche / remplacement :%s/[PASTE YANKED PHRASE]//g et je suis parti.

Si vous souhaitez uniquement coller un seul mot en mode ex, vous pouvez vous assurer que le curseur est bien sur le bouton avant d’entrer en mode ex, puis appuyez sur en mode ex pour coller le mot.

Je pense que le registre secret du gourou est l’expression = register. Il peut être utilisé pour les mappages créatifs.

 :inoremap \d The current date =system("date") 

Vous pouvez l’utiliser avec votre système comme ci-dessus ou obtenir des réponses de fonctions VimL personnalisées, etc.

ou juste des choses ad hoc comme

 =35+7 

Une astuce consiste à utiliser "1p pour coller la dernière suppression / modification (, puis à utiliser à plusieurs resockets pour coller les suppressions suivantes. En d’autres termes, "1p... est équivalent à "1p"2p"3p"4p .

Vous pouvez l’utiliser pour inverser une poignée de lignes: dddddddddd"1p....

  • q5 enregistre les modifications dans le registre 5 (q arrête l’enregistrement)
  • : reg affiche tous les registres et leurs contenus
  • @ 5 exécuter le registre 5 macro (modifications enregistrées)

De la page d’aide de vim:

 CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_* Insert the contents of a numbered or named register. Between typing CTRL-R and the second character '"' will be displayed <...snip...> Special registers: '"' the unnamed register, containing the text of the last delete or yank '%' the current file name '#' the alternate file name '*' the clipboard contents (X11: primary selection) '+' the clipboard contents '/' the last search pattern ':' the last command-line '-' the last small (less than a line) delete '.' the last inserted text *c_CTRL-R_=* '=' the expression register: you are prompted to enter an expression (see |expression|) (doesn't work at the expression prompt; some things such as changing the buffer or current window are not allowed to avoid side effects) When the result is a |List| the items are used as lines. They can have line breaks inside too. When the result is a Float it's automatically converted to a Ssortingng. See |registers| about registers. {not in Vi} <...snip...> 

J’utilise le registre par défaut pour grep pour le texte dans ma fenêtre vim sans avoir à utiliser la souris.

  1. yank texte
  2. :!grep "0"

Utilisez les registres dans les commandes avec @ . Par exemple:

 echo @a echo @0 echo @+ 

Définissez-les dans la commande:

 let @a = 'abc' 

Maintenant "ap va coller abc .

Une source importante de confusion est le registre par défaut " . Il est important de savoir comment cela fonctionne. Il est préférable que le registre par défaut soit évité la plupart du temps. L’explication de la documentation de Vim:

 Vim fills this register with text deleted with the "d", "c", "s", "x" commands or copied with the yank "y" command, regardless of whether or not a specific register was used (eg "xdd). This is like the unnamed register is pointing to the last used register. 

Le registre par défaut est donc un pointeur sur le dernier registre utilisé. Lorsque vous supprimez ou tirez quelque chose, ce registre va pointer vers d’autres registres. Vous pouvez tester cela en vérifiant les registres. Il y a toujours un autre registre qui est exactement le même que le registre par défaut: le registre yank ( "0 ), le premier registre de suppression ( "1 , le petit registre de suppression ( "- ) ou tout autre registre utilisé pour supprimer ou yank .

La seule exception est le registre des trous noirs. Vim doc dit:

 An exception is the '_' register: "_dd does not store the deleted text in any register. 

Habituellement, vous êtes beaucoup mieux en utilisant directement: "0 "- et "1-"9 registres par défaut ou des registres nommés.

Un registre négligé est le ‘.’ point registre qui contient le dernier texte inséré, peu importe comment il a été inséré par exemple ct] (changer jusqu’à)). Ensuite, vous réalisez que vous devez l’insérer ailleurs, mais que vous ne pouvez pas utiliser la méthode de répétition des points.

  :reg . :%s/fred/./ 

Mon registre préféré est le registre ':' . Running @: en mode Normal me permet de répéter la commande ex précédemment exécutée.

Mon ami Brian a écrit un article complet à ce sujet. Je pense que c’est une excellente introduction à la façon d’utiliser des sujets. https://www.brianstorti.com/vim-registers/