Question Comment utiliser les registres vim?


Je ne connais qu'une seule instance en utilisant les registres est via CtrlR* par lequel je colle du texte à partir d'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.


824
2017-09-30 13:12


origine


Réponses:


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

"kyy

Ou tu peux ajouter à un registre en utilisant une lettre majuscule

"Kyy

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

"kp

Pour coller à partir du presse-papiers du système sous Linux

"+ p

Pour coller à partir du presse-papiers système sur Windows (ou à partir du presse-papiers "souris en surbrillance" sur Linux)

"* p

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

: reg


1035
2017-09-30 13:17



J'étais content quand j'ai découvert le 0 registre. Si vous saisissez du texte sans l'affecter à un registre particulier, il sera affecté à 0 enregistrer, ainsi que d'être enregistré dans la valeur par défaut " registre. La différence entre le 0 et " registres est que 0 est seulement rempli avec du texte saisi, alors que le registre par défaut est également rempli avec du texte supprimé en utilisant d/D/x/X/c/C/s/S commandes.

Je trouve cela utile quand 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
  • Supprimer le texte que vous voulez remplacer par d[motion] - Ce texte est enregistré dans " registre
  • Collez le texte saisi avec "0p

" 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 utiliserait le texte que vous venez de supprimer (probablement pas ce que vous vouliez).

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

Pour plus d'informations voir :help registers.


702



Une de mes parties préférées sur les registres est de les utiliser comme des macros!

Supposons que vous traitiez un fichier de valeur 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

Vous décidez maintenant que vous devez ajouter un signe de pourcentage à la fin du champ% Dev (à partir de la deuxième ligne). Nous allons faire une macro simple dans le (arbitrairement sélectionné) m s'inscrire comme suit:

  1. Presse: qm: Pour commencer à enregistrer une macro sous m registre.

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

  3. a: Insérer le mode à ajouter à la fin de cette colonne.

  4. %: Tapez le signe de pourcentage que nous voulons ajouter.

  5. <ESC>: Revenez en mode de commande.

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

  7. q: Arrêter la macro d'enregistrement

Nous pouvons maintenant taper @m pour exécuter cette macro sur la ligne en cours. En outre, nous pouvons taper @@ répéter, ou 100@m pour faire cela 100 fois! La vie a l'air plutôt bien.

À ce stade, vous devriez dire, "Mais attendez, ce que le HECK fait cela avec REGISTRES? "

Excellent point. Cherchons ce qui est dans le contenu de la m inscrivez-vous en tapant "mp. Nous obtenons ensuite ce qui suit:

EEa%<ESC>j0

Au début, cela semble que vous avez accidentellement ouvert un fichier binaire dans le bloc-notes, mais au second coup d'œil, c'est la séquence exacte de caractères dans notre macro!

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

EEa!<ESC>j0

Alors tirons ceci dans le n inscrivez-vous en tapant B"nyE. Ensuite, juste pour les coups de pied, courons le n macro sur une ligne de nos données en utilisant @n....

OMG, IL AJOUTÉ A !

Essentiellement, exécuter une macro revient à appuyer sur la séquence exacte des touches dans le registre de cette macro. Si ce n'est pas un truc cool, je vais manger mon chapeau.


301



Autres registres utiles:

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

"/ - dernière commande de recherche

": - dernière commande.

Remarquez avec les macros vim, vous pouvez les éditer, 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 écrire une macro une) et les éditer, et les charger dans un registre avec "ay$. Belle façon de stocker des macros utiles.


94



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

Je l'utilise dans mon vimrc pour permettre la suppression de 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

65



Si jamais vous voulez coller le contenu du registre dans une commande ex-mode, appuyez sur <C-r><registerletter>.

Pourquoi voudriez-vous l'utiliser? Je voulais faire une recherche et remplacer pour une chaîne longue, donc je l'ai sélectionné en mode visuel, a commencé à taper l'expression de recherche / remplacement :%s/[PASTE YANKED PHRASE]//g et a continué ma journée.

Si vous ne voulez coller qu'un seul mot en mode ex, vous pouvez vous assurer que le curseur est dessus avant d'entrer en mode ex, puis frapper <C-r><C-w> en mode ex pour coller le mot.


45



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

:inoremap  \d The current date <c-r>=system("date")<cr>

Vous pouvez l'utiliser en conjonction 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

<c-r>=35+7<cr>

41



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

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


31



  • q5 enregistre les modifications dans le registre 5 (le prochain q arrête l'enregistrement)
  • : reg montre tous les registres et tous les contenus en eux
  • @ 5 exécuter le registre 5 macro (modifications enregistrées)

16