Je travaille avec un fichier YAML qui a un entier comme ID qui apparaît toutes les 4-6 lignes. Je cherche à ajouter un enregistrement au milieu de ce fichier (pour la lisibilité) qui conserve la numérotation séquentielle intacte.
format de fichier ci-dessous. Des idées? P>
- id: 1 type: string option: diff_string other: alt_string // note: 'other' option does not appear for all records - id: 2 type: string option: diff_string //new record would go here as id: 3, increasing id: # of all following records by 1 - id: 3 type: string option: diff_string other: alt_string
3 Réponses :
Afin d'incrémenter tous les identifiants suivants de la ligne de curseur + 1: ( Vous pouvez également faire: p> où vous entrez Détail: P> Si vous voulez un mappage: p> mettre cela dans votre VIMRC, et aimez maintenant appuyer sur F1 en mode normal et regarder tous les identifiants sous la ligne de curseur incrémentation. p> p> nr2char (1) code> est comme Ctrl-A dans). p>
^ a code> typing ctrl-v puis ctrl-a. Notez que je préfère la première version: vous pouvez le copier-la coller, il n'y a pas de caractère de commande littéral dans le code. P>
. + 1, $ code> est la plage de la ligne suivante jusqu'à la fin du fichier.
: Plage d'aide Code>. Li>
: g code> fonctionne sur toutes les lignes obéissant à un motif. L'inverse est
: v code>.
: Aide: g code> li>
/ ^ - id: \ d \ + $ / code> correspondances
- id: code> au début d'une ligne, suivi de 1 ou plusieurs chiffres, puis de fin de ligne (
: modèle d'aide code>) li>
: normal! code> joue des commandes normales: 0 Pour aller au début de la ligne, Ctrl-A pour incrémenter le numéro suivant. LI>
ul>
Excellent, bien que je préfère le changement global personnellement. Merci Benoit, pour votre aide sur toutes les réponses avec cette question.
Je pense que vous pouvez obtenir ce que vous voulez avec définir un compteur (ici: variable puis exécuter une substitution sur Chaque ligne qui correspond la substitution utilise le avec le edit forte> si vous Voulez-vous avoir une carte em> pour cela, vous pouvez placer le snippet suivant dans votre .vimrc em>: p> qui permet resync em> vos identifiants en tapant Notez l'échappement du g: i code>) à 1:
^ - id: \ d \ + $ code>: p>
\ = code> trucsy (Voir
: Aide Sous-remplacement-expression code>) à remplacer
\ d \ + code> avec la valeur réelle de
g: i code>. Après la sous-tension, le compteur est incrémenté (
que g: i = g: i + 1 code>). P>
g / ^-id: \ d \ + $ / code> Vous vous assurez que la substitution n'est effectuée que sur les lignes correspondant
^ - ID: \ d \ + code>. p>
resync code> dans mode normal em>. p>
| Code> avec le
\ code> et l'utilisation de
Ceci est un autre moyen valide et il renbliera chaque identifiant unique dans le document en commençant par 1 du début à la fin. Copiez ce code dans votre presse-papiers et utilisez : @ + code> pour essayer (si vous utilisez une interface graphique).
Que fait : @ + code> faire? Je vois qu'il imprime le
id: x code> lignes mais je n'ai aucune idée de pourquoi c'est.
NYFENEGGER: : @ code> joue les commandes ex-ext stockées dans un registre. Le registre
+ code> est normalement connecté au presse-papier externe. Voir
: Aide: @ code>. Ceci est putain utile si vous souhaitez essayer des extraits de VIMRC:
yy code> alors
: @ " code>.
J'aime cette méthode car elle garantit que l'ensemble du fichier est en ordre, quel que soit le point de départ. Merci!
René: Est-il possible de sauvegarder cela comme une liaison dans .VIMRC? Quand j'ai essayé, je reçois des erreurs en raison des variables.
@ René Nyfenegger: Je préférerais «Nnoremap» plutôt que «NMAP» à moins que vous ayez une bonne raison d'utiliser «NMAP»!
@Benoit: Merci, ça change.
J'utiliserais la commande de substitution courte et simple suivante.
:,$s/^- id: \zs\d\+/\=submatch(0)+1/