Come posso incollare la stessa riga di codice X volte ma cambiare una parola nella riga ogni volta?


8

Sto scrivendo elenchi HTML e voglio essere in grado di incollare automaticamente 10 voci di elenco in cui il testo dell'articolo è l'unica cosa che cambia.

Potrei farlo usando PHP e poi semplicemente copiando il codice HTML renderizzato, ma se c'è un modo per saltare quel passaggio e farlo direttamente da Vim mi farebbe risparmiare così tanto tempo.


4
Dai un'occhiata al plugin github.com/mattn/emmet-vim , potrebbe soddisfare le tue esigenze. Altrimenti puoi usare una macro per farlo, conosci il testo in anticipo?
— nobe4,

Sì, so quale testo voglio inserire in ciascun elemento. Grazie per il suggerimento sul plugin, darò un'occhiata a casa stasera e analizzerò anche le macro di Vim.
— Azmodeus,

Risposte:


9

Per quello che vuoi fare, emmet-vim , come suggerito da nobe4, è la soluzione migliore.

Nella modalità di inserimento, li{item $}*10<c-y>,espande 10 <li>s con item Npre-compilato come testo. Inizierai a modificare i contenuti del primo. Mentre si è ancora in modalità inserimento, premendo <c-y>nsi passa al tag successivo per la modifica.

Se le voci dell'elenco non sono un testo ripetuto in sequenza, puoi utilizzare vim-surround per aiutarti.

Elenco di esempio di testo che deve essere racchiuso:

abc
def
ghi

Se si inizia con il cursore in qualche punto del testo, premendo ^vip$<c-v>Stli<cr>si avvolgerà ciascuna riga <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

Questo può essere trasformato in una mappa chiave facile da usare:

nmap <leader>li ^vip$<c-v>Stli<cr>

1
Mi hai risparmiato molta agonia. Grazie Signore.
— Azmodeus,

1
@Azmodeus Sono contento che abbia aiutato. vim-surround è un tale incentivo di produttività che dovresti prenderti il ​​tempo di seguire insieme ai suoi documenti. E nel caso non lo sapessi, emmet-vim funzionerà in fogli di stile precompilati come sass o meno. Ad esempio, prova questo in un file scss:.col$*5>.inner
— Tommy A

2

Probabilmente lo farei con una mappatura:

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

Il piano è quello di inserire nei tag e quindi inserire l'inserto tra loro, in modo da poter digitare il testo, tornare alla modalità normale e quindi fare di nuovo ctrl-b. (PS, ^ B e ^ [vengono inseriti usando ctrl_V, ma probabilmente lo sapevi già.) Per mettere in dieci righe in un solo comando, puoi usare

10ctrl_b

Non ero chiaro se hai qualche modo automagico di creare effettivamente il testo dell'articolo?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.