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.