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?
substitute
register
ex-mode
Kenorb
quelle
quelle
:help function-list
eine sehr nützliche Seite ist ;-) Es gibt auch einige andere Tags auf dieser Seite, wie zstring-functions
.Antworten:
Ex-Befehle bearbeiten den Pufferinhalt. Für Registerinhalte (oder variable Inhalte) müssen Sie eine entsprechende Vimscript-Funktion verwenden (falls vorhanden).
Denn
:substitute
das Äquivalent istsubstitute()
(das war einfach, oder?) Also:quelle
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.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:
.s/_/test/g
quelle