Come trovare la linea con il numero massimo di colonne / caratteri in Vim / gVim?

Sto attualmente utilizzando gVim su Windows XP e ho due follow-up alla mia domanda principale:

Qual è il modo migliore per trovare la linea con i più caratteri?

Il mio metodo attuale: uso la ricerca di regex :/^\(\p\)\{#number#,}$ ) e continuo a aumentare l'integer #number# finché non ottiene una sola corrispondenza. Nel caso del mio file, è una linea di soli 81K caratteri – non 916.657 come ho pensato in precedenza. Lo so perché quando il cursore è in quella linea premo g + Ctrl+g e otterò il count della colonna di 81K.

Followup 1) La domanda "What is the best method of finding the line with the most columns?" lo stesso di # 2 sopra?

Followup 2) Cosa significa il secondo numero quando apro un file e vedo la seguente row nella parte inferiore dello schermo:

immettere qui la descrizione dell'immagine

Ho interpretato questo per significare che il file ha 14.871 righe, e alless una row ha 916.657 colonne. Ho controllato che il file ha 14.871 righe, ma non sono stato in grado di capire lo scopo del secondo (916K).

Il secondo numero è il numero totale di caratteri nell'integer file. Se fate:

 $ wc -l -c filename 

dovresti vedere gli stessi due numbers (righe e caratteri totali). Infatti, puoi fare:

 :!wc -l -c % 

Ecco un plugin chiamato textfilter ( download ) che include una function per trovare la linea più lunga.

Oppure puoi utilizzare questo per trovare la lunghezza della linea più lunga:

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

allora puoi utilizzare questo numero come questo:

 /^.\{248\}$ 

Ci deve essere un modo migliore ma anche:

 %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 /<cr>" "Search for the longest line mm "Mark it 'm' u "Undo the replace 'm "Go to the mark - there! 

Cam't parlare alla prima domanda, ma il secondo numero nel messaggio di caricamento file è il numero totale di caratteri nel file.

Ecco una function che lo fa.

 function MaxLine() let maxcol = 0 let lnum = 1 while lnum <= line("$") call cursor(lnum, 0) if col("$") > maxcol let maxcol = col("$") let maxline = lnum endif let lnum += 1 endwhile echo "Line" maxline "has" maxcol - 1 "characters" endfunction 

Puoi eseguirlo con

 :call MaxLine() 

o definire un command o un mapping per chiamarlo.

Tieni presente che trovare la row con le colonne più effettive è la stessa della linea con i più caratteri. Quella non può essere la stessa della linea con i bytes più. Se vuoi trovare la row con le colonne più virtuali, sostituisci col("$") con virtcol("$") .