2013-07-16 7 views
9

Angenommen, Sie diesen Text haben:Wie teilt man Text in mehrere Zeilen basierend auf einem Muster mit Vim?

name1 = "John"; age1 = 41; 
name2 = "Jane"; age2 = 32; 
name3 = "Mike"; age3 = 36; 
... 

und Sie möchten jede Zeile in zwei Zeilen aufgeteilt ein Ergebnis wie dieses zu geben:

name1 = "John"; 
age1 = 41; 
name2 = "Jane"; 
age2 = 32; 
name3 = "Mike"; 
age3 = 36; 
... 

Wie würden Sie diesen Vorgang automatisieren?

Einige Anmerkungen:

  1. Ich habe bereits versucht, die folgende Methode:
    (1) Wählen Sie den Text in der virtuellen vode,
    (2) :'<,'>:norm ^3f r^M Execute ***,
    es aber funktioniert nicht richtig; es teilt nur die Hälfte der Zeilen auf, weil nach jeder unterbrochenen Zeile die nächste Wiederholung des Befehls auf den Rest der unterbrochenen Zeile anstatt auf die nächste Zeile angewendet wird!
  2. Dies kann mit einem Makro erreicht werden, aber ich suche eine elegantere Lösung.


*** Erläuterung der Sequenz:

- norm zur Ausführung der folgenden Befehle im Normal-Mode
- ^ für den Cursor an den Anfang Bewegen der Linie
- 3f<space> fo r den Cursor auf den dritten Platz in der Linie bewegen
- r^M für diesen Raum mit einem neuen Online-Ersatz

+0

möglich Duplikat von [Wie ein Zeichen für eine neue Zeile in Vim ersetzen?] (Http : //stackoverflow.com/questions/71323/how-to-replace-a-character-for-a-newline-in-vim) –

Antwort

24

auf die gesamte Datei zu arbeiten, verwenden Sie diese:

:%s/; /;\r/ 

Zum Betrieb nur auf den markierten Text, verwenden Sie diese:

:'<,'>s/; /\r/ 

Übersetzung:

jedes Vorkommen vonSemikolon gefolgt von einem Leerzeichen ersetzenmitSemikolon durch eine neue Zeile gefolgt.“

Erläuterung:

% - operate on the entire file 
s - substitute 
/ - symbol that separates search/replace terms 
; - the character you're searching for (notice I added a space) 
;\r - the replacement text (semi-colon followed by newline) 

Das etwa als Grund ist, als es für die Substitution in Vi bekommt.


Weitere geekiness:

Ich habe tatsächlich die für Situationen wie diese in meinem .vimrc Datei zugeordnet folgende:

" 
" add a newline after each occurrence of the last search term 
" 
nnoremap SS :%s//&\r/<CR> 

Dieser Befehl jede Zeile einer Datei beim ersten Auftreten spaltet von das letzte Suchmuster

Also, für Ihren Anwendungsfall würden Sie dies tun:

  1. Suche nach ; (Sie wollen oder können kein Leerzeichen enthalten ... bis zu Ihnen)
  2. den folgenden Befehl ein im normalen Modus: SS

Jede Zeile der Datei wird Split im ersten ; Symbol erhalten.

Um zu klären, die folgenden 5 Tastenanschläge verwenden würden:

/;ENTERSS

Diese für sehr praktisch ist, XML schnell Formatierung, HTML, etc ...

Verwandte Themen