Comment coller la même ligne de code X fois mais changer un mot dans la ligne à chaque fois?

8

J'écris des listes HTML et je veux pouvoir coller automatiquement 10 éléments de liste où le texte de l'élément est la seule chose qui change.

Je pourrais accomplir cela en utilisant PHP et ensuite simplement copier le code HTML rendu, mais s'il y a un moyen de sauter cette étape et de le faire directement depuis Vim, cela me ferait gagner beaucoup de temps.

Azmodée
la source
4
Jetez un œil au plugin github.com/mattn/emmet-vim , il peut convenir à votre besoin. Sinon, vous pouvez utiliser une macro pour le faire, connaissez-vous le texte à l'avance?
nobe4
Oui, je sais quel texte je veux mettre dans chaque élément. Merci pour la suggestion de plugin, je vais jeter un œil à la maison ce soir et aussi regarder les macros Vim.
Azmodeus

Réponses:

9

Pour ce que vous voulez faire, emmet-vim , comme l'a suggéré nobe4, est votre meilleur choix.

En mode insertion, li{item $}*10<c-y>,étendra 10 <li>s avec item Npré-rempli comme texte. Vous allez commencer à modifier le contenu du premier. En mode d'insertion, appuyez sur <c-y>npour passer à la prochaine balise à modifier.

Si vos éléments de liste ne sont pas une séquence de texte répété, vous pouvez utiliser vim-surround pour vous aider.

Exemple de liste de texte devant être encapsulé:

abc
def
ghi

Si vous commencez avec votre curseur quelque part dans le texte, appuyez sur ^vip$<c-v>Stli<cr>pour envelopper chaque ligne avec <li></li>.

^     - move to the first column
vip   - select the paragraph
$     - Move to the last column in the selection
<c-v> - Convert the visual selection into a block. Without the
        previous $, it would only select 1 column.
St    - Start vim-surround's tag entry
li    - The tag name
<cr>  - Enter

Cela peut être transformé en une carte clé facile à utiliser:

nmap <leader>li ^vip$<c-v>Stli<cr>
Tommy A
la source
1
Vous avez sauvé mes doigts beaucoup d'agonie. Merci Monsieur.
Azmodeus
1
@Azmodeus Heureux que cela ait aidé. vim-surround est un tel booster de productivité que vous devriez prendre le temps de suivre ses documents. Et juste au cas où vous ne le sauriez pas, emmet-vim fonctionnera dans des feuilles de style précompilées comme sass ou moins. Par exemple, essayez ceci dans un fichier scss:.col$*5>.inner
Tommy A
2

Je le ferais probablement avec une cartographie:

 :nmap ^B o<li></li>^[4hi

Le plan consiste à insérer dans les balises, puis à placer l'insertion entre elles, afin que vous puissiez taper le texte, revenir en mode normal, puis refaire Ctrl-b. (PS, les ^ B et ^ [sont entrés en utilisant ctrl_V, mais vous le saviez probablement déjà.) Pour mettre dix lignes en une seule commande, vous pouvez utiliser

10ctrl_b

Je ne savais pas si vous aviez un moyen automatique de créer réellement le texte de l'article?

Tim Ferguson
la source