Beispiel Eingabedatei
%Vor%Es ist erforderlich, die S1-Spalte zu entfernen, d. h.
Gewünschte Ausgabe
%Vor%Kann jemand dabei helfen
Danke
Im Befehlsmodus:
%Vor%Dies verwendet den integrierten Befehl sed-like search and replace von vim. Hier ist die Aufschlüsselung:
%
- für die gesamte Datei
s
- Suche nach
/^
- der Anfang der Zeile
\([[+|][^+|]\+\)
- gefolgt von +
oder |
, gefolgt von einer beliebigen Zahl ( \+
) von allem, was nicht +
oder |
ist. Dadurch erhalten Sie die erste Spalte, die wir behalten möchten. Legen Sie sie also in eine Erfassungsgruppe, indem Sie sie mit \(
und \)
[+|][^+|]\+
- gefolgt von +
oder |
, gefolgt von einer beliebigen Zahl ( \+
) von allem, was nicht +
oder |
ist. Das wird die zweite Spalte bekommen, die wir nicht behalten wollen, also keine Capture-Gruppe.
//
- Ersetzen Sie alles, was wir gefunden haben, mit der ersten Erfassungsgruppe (die die erste Spalte enthält). Dies ersetzt effektiv die erste und zweite Spalte durch den Inhalt der ersten Spalte.
Wie ich schon sagte, sind die Regex von vim ziemlich identisch mit sed. Wenn Sie also dieses Tutorial auf sed Sie werden wahrscheinlich auch eine Menge nützlicher Dinge für vim aufheben.
Bearbeiten
Als Reaktion auf die Anfrage des OP, diese allgemein dazu zu bringen, jede -Spalte zu löschen:
%Vor% Der Index innerhalb von \{\}
löscht nun die angegebene Spalte. Stellen Sie sich das wie einen Array-Index vor (d. H. Beginnt bei Null). So löscht \{0\}
jetzt die erste Spalte, \{1\}
löscht die zweite Spalte und so weiter.
Mein pragmatischer Ansatz wäre: Nach Spaltenankern suchen ( -+-
)
Jetzt ist die Spaltenlöschung so einfach wie
%Vor%(löschen Sie blockweise bis zum nächsten Vorkommen des Spaltenankers vom Ende des Dokuments).
Um mehrere Spalten zu berücksichtigen, möchten Sie genau angeben, welche Spalte
entsprichtDas braucht ein bisschen mehr Pep
0 f + <%
N Cv N t + > d
Um mehr über diese :exec '/\%' . col('.') . 'v\v[+|]'
-Wege zum Auswählen einer virtuellen Spalte zu erfahren, siehe
Ich möchte den Kommentar von Mathias Schwarz in eine Antwort schreiben, weil Visual Mode der natürliche Weg für die Aufgabe ist, obwohl es bereits eine akzeptierte Antwort gibt.
Angenommen, der Cursor befindet sich in
%Vor% Verwenden Sie den normalen Befehl Strg-V 8jf+d
, um die Spalte S1
auszuwählen und zu löschen. Erklärung:
+
-Zeichen. Und das Ergebnis ist:
%Vor%Wenn dies der einzige Inhalt der Datei ist, ist der einfachste Weg, dies zu verwenden:
%Vor%Wenn in der Datei mehr Text vorhanden ist, wird das Zeilenintervall angegeben:
%Vor% Dabei ist X und Y das Zeilenintervall, z. B .: 10,17normal 22|d32|
Wenn Sie mit dem normalen Befehl und mit | nicht vertraut sind "Bewegung" gibt es eine kurze Erklärung:
normal
führt die folgenden Befehle im Modus normal aus; 22|
den Cursor auf die 22. Spalte verschiebt; Was :X,Ynormal 22|d32|
tatsächlich tut, ist, den Cursor auf die 22. Spalte ( 22|
) zu setzen und alles ( d
) bis zur 32. Spalte ( 32|
) für jede Zeile zu löschen spezifiziert durch X und Y.
Basierend auf Mustern Ihrer Tabelle kann dies in zwei einfachen Befehlen erreicht werden:
%Vor% Wo 2
ist Ihre zu entfernende Spalte ( 1
entfernt 1., 3
- 3.).
Dies funktioniert wie folgt (für jede Zeile auf einmal):
2f+
oder 2f|
). dF+
oder dF|
). Hier ist der Befehlszeilen-Ansatz, der die zweite Spalte an Ort und Stelle entfernt:
%Vor%Tags und Links vim