Wie füge ich dieselbe Codezeile X-mal ein, ändere aber jedes Mal ein Wort in der Zeile?

8

Ich schreibe HTML-Listen und möchte in der Lage sein, 10 Listenelemente automatisch einzufügen, wobei sich nur der Elementtext ändert.

Ich könnte dies mit PHP erreichen und dann nur den gerenderten HTML-Code kopieren, aber wenn es eine Möglichkeit gibt, diesen Schritt zu überspringen und direkt von Vim aus auszuführen, würde ich so viel Zeit sparen.

Azmodeus
quelle
4
Schauen Sie sich das Plugin github.com/mattn/emmet-vim an , es könnte Ihren Anforderungen entsprechen. Andernfalls können Sie dazu ein Makro verwenden. Kennen Sie den Text im Voraus?
nobe4
Ja, ich weiß, welchen Text ich in jedes Element einfügen möchte. Vielen Dank für den Plugin-Vorschlag. Ich werde heute Abend einen Blick nach Hause werfen und mir auch die Vim-Makros ansehen.
Azmodeus

Antworten:

9

Für das, was Sie tun möchten, ist emmet-vim , wie nobe4 vorgeschlagen hat, die beste Wahl.

li{item $}*10<c-y>,Erweitert im Einfügemodus 10 <li>s mit item Nvorgefülltem Text. Sie beginnen mit der Bearbeitung des Inhalts des ersten. Wenn Sie sich noch im Einfügemodus befinden, wird durch Drücken <c-y>nzum nächsten Tag zum Bearbeiten gewechselt.

Wenn es sich bei Ihren Listenelementen nicht um einen sequenzwiederholten Text handelt, können Sie vim-Surround als Hilfe verwenden.

Beispielliste mit Text, der umbrochen werden muss:

abc
def
ghi

Wenn Sie mit dem Cursor irgendwo im Text beginnen, ^vip$<c-v>Stli<cr>wird jede Zeile durch Drücken von umbrochen <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

Dies kann zu einer benutzerfreundlichen Key Map gemacht werden:

nmap <leader>li ^vip$<c-v>Stli<cr>
Tommy A.
quelle
1
Du hast meinen Fingern viel Qual erspart. Danke mein Herr.
Azmodeus
1
@ Azmodeus Ich bin froh, dass es geholfen hat. vim-Surround ist ein solcher Produktivitätssteigerer, dass Sie sich die Zeit nehmen sollten, den Dokumenten zu folgen. Und für den Fall, dass Sie es nicht wussten, funktioniert emmet-vim in vorkompilierten Stylesheets wie sass oder weniger. Versuchen Sie dies beispielsweise in einer scss-Datei:.col$*5>.inner
Tommy A
2

Ich würde dies wahrscheinlich mit einem Mapping tun:

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

Es ist geplant, Tags einzufügen und die Einfügung dazwischen zu platzieren, damit Sie den Text eingeben, in den normalen Modus zurückkehren und dann erneut Strg-B drücken können. (PS, ^ B und ^ [werden mit ctrl_V eingegeben, aber das wussten Sie wahrscheinlich schon.) Um zehn Zeilen in einem einzigen Befehl einzufügen, können Sie verwenden

10ctrl_b

Mir war nicht klar, ob Sie eine automatische Art haben, den Elementtext tatsächlich zu erstellen.

Tim Ferguson
quelle