6
votes

Insert Vim après nombre spécifique de délimiteurs

Je cherche à faire du code plus facile à lire en prenant quelque chose comme ceci: xxx

et ajout de nouvelles lignes pour créer des incréments de 8: xxx

Quelqu'un connaît toute magie Vim qui me permettra de le faire avec des lignes spécifiquement sélectionnées?

vim

0 commentaires

5 Réponses :


5
votes

Ce n'est pas la plus jolie solution et je suis sûr que cela peut être nettoyé / simplifié certains. Tout d'abord, sélectionnez le texte, puis entrez cette commande:

0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, ...


5 commentaires

On peut également utiliser une gamme de lignes plutôt qu'une sélection visuelle: :, + 5s ... . Aussi, pas besoin d'échapper au } dans le quantificateur: \ {8} .


Je ne peux pas garantir à Vim comme je suis au travail, mais dans VI le {8} doit que les supports se soient échappés.


VI nécessite une échappée les deux bretelles ? Je n'ai pas de vrai VI pour tester. Le modèle ci-dessus, en utilisant \ {8} fonctionne dans VIM après SET Compatible , mais ce n'est pas une preuve. En outre, : help / \ { affirme que {VI ne possède aucune de ces} , re: quantifiers . Cela ne semble pas juste, mais ça fait quelque temps depuis que j'avais un vrai VI devant moi


Dans Vim, la fermeture } ne doit pas être échappée, mais il n'y a pas de mal à y échapper.


Je me suis trompé. VI n'a pas besoin d'échapper à la corse de fermeture. Désolé pour la confusion.



1
votes

Une façon de tricher serait:

  1. SET TEXTWIDTH = 48
  2. Metteur (en mode visuel) Les lignes que vous souhaitez envelopper
  3. gq

    Cela fonctionnera juste bien, tant que la TextWidth est à peu près là où vous voulez envelopper. Si tous les éléments de la liste sont de la même largeur, cette méthode doit être sans faille.

    Un autre moyen légèrement plus robuste, serait de définir une macro.

    1. Déplacez votre curseur au début de la ligne
    2. qw pour commencer à enregistrer une macro dans le registre w (vous pouvez utiliser n'importe quel registre)
    3. 8f, a appuyez sur Entrée, laissez le mode insertion et appuyez sur q à nouveau
    4. @W Pour rejouer la macro autant de fois que nécessaire. Je suis sûr qu'il y a un moyen intelligent d'automatiser combien de fois pour rejouer la macro, mais je ne sais pas comment. Vous pouvez également appuyer sur @@ pour exécuter la plus récente macro exécutée.

      Une expression régulière fonctionne également, comme @ZaneGray Publié.


1 commentaires

Le nom officiel de Vim pour une macro-clés est "Enregistrement". aide q



0
votes

Vous pouvez le faire avec une commande multi-pièces qui pourrait être plus facile à envelopper votre tête autour de ...

Faire une macro qui ajoute un demi-point après la 8ème virgule. P>

gv
:'<,'>s/;/\r/g


0 commentaires

1
votes

Cela ne gagnera aucun concours de golf VIM, mais j'aime penser à des problèmes comme celui-ci en quelques étapes simples.

  1. mettre chaque élément sur sa propre ligne. LI>
  2. rejoindre 8 ligne ensemble à la fois li>
  3. faire un nettoyage nécessaire à la main li> ol>

    Pour ce faire, exécutez ce qui suit: P>

    :h range
    :h :j
    :h :s
    :h :g
    :h '[
    
    • : s /, /, \ r / g code> substituer tous les espaces après la virgule avec un retour ( \ r code>) li>
    • '['] code> est la plage du texte récemment modifié. LI>
    • g /./ {cmd} code> exécutera une commande, {cmd} code>, sur toutes les lignes correspondant . code> (n'importe quel non vide ligne) li>
    • j 8 code> est court pour joindre 8 code> qui signifie joindre 8 lignes li> ul>

      Maintenant un mot d'avertissement: cela rejoindra 8 lignes même après la fin de la fin du texte substitué, '] code>. Cela pourrait être surmonté avec une commande plus complexe comme: : '['] g /./.-+ 6 /, $ / j 8 code>, mais ce n'est pas assez simple pour mes goûts. Si ce problème est une vraie préoccupation, je déplacerais le texte d'origine dans un nouveau tampon (via : nouveau code>) ou au moins le bas du tampon actuel. Après avoir terminé la transformation, déplacez-la en place. P>

      Pour plus d'informations P>

      :s/, /,\r/g
      :'[,']g/./j 8
      


0 commentaires

0
votes

Cette solution est donc basée sur la solution forte> STRAND> Zanegray et une petite peau de peau de ma part:

:s/\(\S\+\s\)/&\r/g


0 commentaires