vim: verstecke die ersten n Buchstaben aller Zeilen in einer Datei

12

Ich analysiere Log-Datei mit vim und das Format sieht so aus

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

Da mir Datum und Uhrzeit die meiste Zeit egal sind. Ich möchte sie ausblenden und mich nur auf die Spalten Name und LogText konzentrieren (um einige Bildschirmeinstellungen zu speichern). Da die ersten drei Spalten immer die ersten 35 Buchstaben in einer Zeile belegen. Gibt es eine Möglichkeit, vim zu veranlassen, die ersten 35 Buchstaben jeder Zeile nicht anzuzeigen?

user881300
quelle
Ich weiß nicht, wie Sie es in vim machen, aber wenn es Ihnen nichts ausmacht, eine temporäre Datei zu erstellen, können Sie sie ausführen cut -c36- logfile > logfile_with_first_35_chars_missingund dann überprüfen.
Warwick

Antworten:

7

Sie haben gefragt, wie Sie die ersten Buchstaben verbergen, nicht entfernen oder außer Sichtweite rollen sollen. So verbergen Sie sie tatsächlich:

Verstecke Text in vim mit verbergen

Sie können den Abgleich in Kombination mit der Syntaxhervorhebung und der Verdeckungsfunktion verwenden, um tatsächlich keine übereinstimmenden Zeichen in Zeilen anzuzeigen.

So verbergen Sie die ersten 25 Zeichen jeder Zeile:

:syn match Concealed '^.\{25\}' conceal
:set conceallevel=2

So blenden Sie stattdessen nur die Zeilen mit der Interpunktion eines Datums aus:

:syn match Concealed '^....-..-.. ..:..:..\..... ' conceal

Einblenden:

:syn clear Concealed
:set conceallevel=0

Was normalerweise so aussieht:

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

sieht nach Ausführung der ersten beiden Befehle so aus:

PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText


Siehe auch - innen vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Lassen Sie es mich wissen, wenn es sich nicht so verhält. Möglicherweise gibt es weitere Einstellungen, die mir nicht bekannt sind.)

Volker Siegel
quelle
1
Funktioniert einwandfrei, ich denke, vim muss mit einer +conceal(meiner) Option kompiliert werden, damit dies funktioniert. Auch gut zu tun set concealcursor=nc, um zu verhindern, dass sich die Cursorzeile ausdehnt.
User881300
Ja, die +concealFunktionsoption ist wie einige Jahre Standard. Schade, dass es mittlerweile nicht mehr bekannt ist. Es ist wirklich großartig und flexibel. Gibt viele neue Optionen ...
Volker Siegel
8

Verwenden Sie die Filterfunktionalität von vim . Lauf:

:%!cut -b36-

um den Inhalt Ihres Puffers durch den cutBefehl zu führen, wobei nur die Bytes 36 und höher beibehalten werden. %bedeutet, den gesamten Puffer zu durchlaufen und seinen Inhalt durch die Ausgabe zu ersetzen! wird der Filterbefehl mit dem Rest der Zeile als Programm ausgeführt. Dadurch wird die zugrunde liegende Datei nicht geändert, es sei denn, Sie speichern den Puffer oben.

Um den ursprünglichen, nicht zugeschnittenen Puffer wiederherzustellen, können Sie ihn verwenden :e, sofern er durch eine echte Datei gesichert ist.

Michael Homer
quelle
Und dann benutzen %!cat %, um es zurück zu bekommen? Das funktioniert map
super
Ja, das wird funktionieren, solange Sie eine echte Datei haben, die Ihren Puffer sichert.
Michael Homer
3
@Michael Homer: Dies funktioniert jetzt mit Unicode-Zeichen.
Dienstag,
6

Ich denke, mehr im Einklang mit dem, was Sie suchen, ist horizontales Scrollen .

Z ist die Befehlstaste für horizontales Scrollen, gefolgt von einer Richtung, in die Sie sich mit der linken oder rechten Pfeiltaste bewegen können.

Zuerst :set nowrapzu deaktivieren Zeilenumbruch. Dann drücken Sie z, 35, 35 Räume zu blättern.

Bahamat
quelle
Dies ist sehr nützlich beim Lesen von Protokollen, danke!
Fabio F.
ok, großartig für eine einzelne Seite, aber ... Wie kann man blättern oder blättern, ohne dass der Cursor wieder an den Zeilenanfang springt?
Elysch
Ich habe gerade in der Antwort von @ user2987828 herausgefunden, wie es geht: using:set nosol
elysch
Stellen Sie den Cursor auf das letzte Zeichen, das ausgeblendet werden soll. Dann [Esc] z s
tippe
2

Versuchen Sie im Befehlsmodus Folgendes:

:%s/^.\{35}//
  • %s/pat/sub/: Ersetze jedes Vorkommen von pat durch sub
  • ^.\{35}: Stimmt mit den ersten 35 Zeichen der Zeile überein

Dieser Befehl entfernt die ersten 35 Zeichen jeder Zeile. Sie können lesen , :h regular-expressionin , um weitere Informationen über reguläre Ausdrücke vim.

cuonglm
quelle
1

Es gibt eine leicht zu merkende Lösung, ohne Puffer oder Dateien zu ändern. Stellen Sie den Cursor auf das erste Zeichen ( Lin Ihrem Beispiel) des gewünschten Dateiabschnitts, und geben Sie dann Folgendes ein

:set nowrap
zs

Der zsBefehl richtet vi so ein, dass das Zeichen mit dem Cursor in der ersten Spalte des Bildschirms angezeigt wird. Stellen Sie sicher, dass Sie :set nosolIhre Konfigurationsdateien nicht eingegeben haben.

Der g$Befehl bewegt den Cursor zur letzten sichtbaren Spalte.

Der g0Befehl bewegt den Cursor zurück zu der ersten sichtbaren Spalte, die L enthält.

Wenn eine Taste den Cursor aus den sichtbaren Spalten nach links oder rechts bewegt, werden die sichtbaren Fenster verschoben.

user2987828
quelle
Und der g0Befehl bewegt den Cursor zur ersten sichtbaren Spalte
elysch