2016-08-19 3 views
1

Ich erstelle eine JSON-Datei und habe herausgefunden, wie Anführungszeichen und so an die entsprechenden Zeilen anhängen, aber ich muss wissen, wie alle zwei Zeilen in geschweiften Klammern zu wickeln.Vim Regex geschweifte Klammern alle paar Zeilen hinzufügen

Ex:

"value": "Bahraini Foreign Ministry" 
"tag": "project:bahrain;id:2201", 
"value": "Bahraini Foreign Minister" 
"tag": "project:bahrain;id:2202", 

muss sein:

{ 
"value": "Bahraini Foreign Ministry" 
"tag": "project:bahrain;id:2201", 
}, 
{ 
"value": "Bahraini Foreign Minister" 
"tag": "project:bahrain;id:2202", 
}, 

ich versucht habe, mit :%norm und :%s und werde hier im Kreis. Irgendwelche Ideen werden geschätzt!

+0

oops, die Kommas sollen am Ende der Wertzeilen stehen – bspckl

+0

Was ist Ihr Ziel? vim Regex zu verwenden oder geschweifte Klammern hinzuzufügen, wo benötigt wird? – Angelos

+0

zum Hinzufügen von geschweiften Klammern, wo in Vim benötigt wird. Es muss nicht regex sein – bspckl

Antwort

2

dNitro's solution ist eine Möglichkeit, es zu tun. Hier ist ein anderer Weg:

qqqqqqO{<esc>jjo},<esc>[email protected]@q 

Dies erzeugt ein rekursives Makro, z.B. ein Makro, das sich selbst aufruft. Da rekursive Makros ausgeführt werden, bis sie einen Fehler verursachen, und der Aufruf von j in der letzten Zeile einen Fehler auslöst, funktioniert dies für jede Datengröße. Erklärung:

qqq löschen Sie das Register 'q'. qq beginnt die Aufzeichnung im Register 'q'. O{<esc> fügt eine Klammer in die Zeile oberhalb der aktuellen Zeile ein. jj bewegt sich nach unten (in die Zeile mit "tag"). o},<esc> setzt eine Klammer auf die nächste Zeile nach der aktuellen Zeile. [email protected] setzt auf eine Zeile mit "Wert" zurück, und @q ruft das Makro 'q' auf. Da es während der Aufnahme leer ist, wird dies nichts bewirken. Wenn Sie jedoch [email protected] drücken, wird die Aufzeichnung gestoppt und das rekursive Makro aufgerufen.

Eine andere Alternative ist die Verwendung des Befehls :global, z.B.

:g/value/normal O{^[jjo}, 

Beachten Sie, dass ^[ ist eine wörtliche Escape-Zeichen, die Sie durch Drücken von „Strg-V, ctrl-esc“

Dies ist im Wesentlichen das Gleiche, mit der Ausnahme, anstatt mit einem Makro eingeben müssen, wird es automatisch wendet den Satz von Tastenanschlägen nach "normal" auf jede Zeile an, die den Text "Wert" enthält.

Und nur zum Spaß, hier ist eine letzte Alternative, ein Ersatz-Befehl:

:%s/.*"value".*\n.*,/{\r&\r},, 

Dies ersetzt zwei Zeilen, in denen die erste Zeile enthält den Text "value", mit dem gleichen Text in Klammern.

Verwandte Themen