Wie findet man die Zeile mit der maximalen Anzahl an Spalten/Zeichen in Vim/gVim?

Wie findet man die Zeile mit der maximalen Anzahl an Spalten/Zeichen in Vim/gVim?

Ich verwende derzeit gVim unter Windows XP und habe zwei weitere Antworten auf meine Kernfrage:

Was ist die beste Methode, um die Zeile mit den meisten Zeichen zu finden?

Meine aktuelle Methode:Ich verwende die Regex-Suche :/^\(\p\)\{#number#,}$) und erhöhe die Ganzzahl, #number#bis ich nur noch eine Übereinstimmung erhalte. Im Fall meiner Datei ist es eine Zeile mit nur 81.000 Zeichen – nicht 916.657, wie ich vorher dachte. Ich weiß das, weil ich, wenn der Cursor auf dieser Zeile ist, drücke g + Ctrl+gund die Spaltenanzahl von 81.000 erhalte.

Folgefrage 1)Ist die Frage "What is the best method of finding the line with the most columns?"dieselbe wie oben Nr. 2?

Folgefrage 2)Was bedeutet die zweite Zahl, wenn ich eine Datei öffne und unten auf dem Bildschirm folgende Zeile sehe:

Bildbeschreibung hier eingeben

Ich interpretiere das so, dass die Datei 14.871 Zeilen hat und mindestens eine Zeile 916.657 Spalten. Ich habe überprüft, dass die Datei tatsächlich 14.871 Zeilen hat, konnte aber den Zweck der zweiten Zeile (916 KB) nicht verstehen.

Antwort1

Die zweite Zahl ist die Gesamtzahl der Zeichen in der gesamten Datei. Wenn Sie Folgendes tun:

$ wc -l -c filename

Sie sollten die gleichen beiden Zahlen sehen (Zeilen und Gesamtzahl der Zeichen). Tatsächlich können Sie Folgendes tun:

:!wc -l -c %

Hier ist ein Plugin namensTextfilter(herunterladen), das eine Funktion zum Suchen der längsten Zeile enthält.

Oder Sie können Folgendes verwenden, um die Länge der längsten Zeile zu ermitteln:

:echo max(map(range(1, line('$')), "col([v:val, '$'])")) - 1

dann können Sie diese Nummer folgendermaßen verwenden:

/^.\{248\}$

Antwort2

Es muss einen besseren Weg geben, aber Folgendes geht auch:

%s/./a/g         "Replace everything with 'a's
sort!            "Sort by column length
ggy$             "Go to first line (longest) and copy it
u                "Undo the sorting
/<c-r>"          "Search for the longest line
mm               "Mark it 'm'
u                "Undo the replace
'm               "Go to the mark - there!

Antwort3

Ich kann nicht auf die erste Frage antworten, aber die zweite Zahl in der Dateilademeldung ist die Gesamtzahl der Zeichen in der Datei.

Antwort4

Nicht so vim-zentriert und ähnlich wie einige andere Antworten, aber für manche Leute vielleicht intuitiver. Dies setzt voraus, dass Sie damit einverstanden sind, einige externe Programme aus vim heraus aufzurufen.

Ich habe folgendes in der Datei test_file:

hello world
helloooooooooooooo world !!!
yo, world!
helloooOoooOooooOo World ! !

Der wcBefehl verfügt manchmal über eine -LOption, die die Größe der längsten Zeile ausgibt. 28 test_fileist die Ausgabe für mein Beispiel.

Sie können diese 28 Zeichenzeilen (und ihre Zeilennummern) mit drucken grep -nP ".{28}" test_file.

2:helloooooooooooooo world !!!
4:helloooOoooOooooOo World ! !

Sie können die wcAusgabe mit analysieren cut. Wenn Sie alles zusammenfügen und einen Befehl in den anderen einfügen, erhalten Sie:

grep -nP ".{$(wc -L test_file | cut -f 1 -d ' ')}" test_file

verwandte Informationen