Wie verwende ich die Substitution im Register?

7

Angenommen, ich habe ein Register, in dem eine Zeichenfolge gespeichert ist, aber ich möchte den Ersatzbefehl verwenden , um sie zu ändern.

Zum Beispiel habe ich 5x5 HTML-Tabelle:

let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',5).'</tr>',5).'</table>'

und ich möchte placeholder ( _) idealerweise durch andere Daten ersetzen, indem ich das vorhandene Register ändere (ohne es einem anderen zuzuweisen).

Ich habe die folgende Syntax ausprobiert:

"ts/_/test/g
"@ts/_/test/g " with modifiable set

Das gibt keine Fehler, funktioniert aber nicht wie erwartet (ähnlich wie das Präfixieren mit %Arbeiten).

Was ist der richtige Weg, das zu tun?

Kenorb
quelle
Du siehst aus, als ob du so etwas wie Emmet willst .
Peter Rincker
2
Beachten Sie, dass dies :help function-listeine sehr nützliche Seite ist ;-) Es gibt auch einige andere Tags auf dieser Seite, wie z string-functions.
Martin Tournoij

Antworten:

11

Ex-Befehle bearbeiten den Pufferinhalt. Für Registerinhalte (oder variable Inhalte) müssen Sie eine entsprechende Vimscript-Funktion verwenden (falls vorhanden).

Denn :substitutedas Äquivalent ist substitute()(das war einfach, oder?) Also:

:let @t = substitute(@t, '_', 'test', 'g')
Ingo Karkat
quelle
3
substitute()ist nicht ganz gleichbedeutend mit :substitute; Die Funktion verhält sich so, als wäre sie 'magic'gesetzt und 'cpoptions'leer, während der Befehl benutzerdefinierte Werte beobachtet.
tommcdo
5

Abgesehen von der Verwendung der let-Anweisung und dem Umgang mit vim-script müssen Sie sie in einen Puffer einfügen und dann zurück in das Register ziehen:

  1. "tp
  2. :.s/_/test/g
  3. "tdd
PhilippFrank
quelle