
Actualmente estoy usando gVim en Windows XP y tengo 2 seguimientos a mi pregunta principal:
¿Cuál es el mejor método para encontrar la línea con más caracteres?
Mi método actual:Utilizo la búsqueda de expresiones regulares :/^\(\p\)\{#number#,}$
) y sigo aumentando el número entero #number#
hasta que obtengo una sola coincidencia. En el caso de mi archivo, es una línea de sólo 81.000 caracteres, no 916.657 como pensaba anteriormente. Lo sé porque cuando el cursor está en esa línea presiono g + Ctrl+g
y obtengo el recuento de columnas de 81K.
Seguimiento 1)¿La pregunta es "What is the best method of finding the line with the most columns?"
la misma que la número 2 anterior?
Seguimiento 2)¿Qué significa el segundo número cuando abro un archivo y veo la siguiente línea en la parte inferior de la pantalla?
Interpreto que esto significa que el archivo tiene 14.871 líneas y al menos una fila tiene 916.657 columnas. Comprobé que el archivo tiene 14.871 líneas, pero no he podido entender el propósito de la segunda (916K).
Respuesta1
El segundo número es el recuento total de caracteres en todo el archivo. Si lo haces:
$ wc -l -c filename
Deberías ver los mismos dos números (líneas y caracteres totales). De hecho, puedes hacer:
:!wc -l -c %
Aquí hay un complemento llamadofiltro de texto(descargar) que incluye una función para encontrar la línea más larga.
O puedes usar esto para encontrar la longitud de la línea más larga:
:echo max(map(range(1, line('$')), "col([v:val, '$'])")) - 1
entonces puedes usar ese número de esta manera:
/^.\{248\}$
Respuesta2
Debe haber una manera mejor, pero lo siguiente también servirá:
%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!
Respuesta3
No hablo de la primera pregunta, pero el segundo número en el mensaje de carga del archivo es el número total de caracteres en el archivo.
Respuesta4
No tan centrado en vim y similar a otras respuestas, pero tal vez más intuitivo para algunas personas. Esto supone que está de acuerdo con llamar a algunos programas externos desde vim.
Tengo lo siguiente en el archivo test_file
:
hello world
helloooooooooooooo world !!!
yo, world!
helloooOoooOooooOo World ! !
El wc
comando a veces tiene una -L
opción que imprime el tamaño de la línea más larga. 28 test_file
es el resultado de mi ejemplo.
Puede imprimir estas líneas de 28 caracteres (y sus números de línea) con grep -nP ".{28}" test_file
.
2:helloooooooooooooo world !!!
4:helloooOoooOooooOo World ! !
Podrías analizar la wc
salida con cut
. Poniéndolo todo junto y pegando un comando a otro, es:
grep -nP ".{$(wc -L test_file | cut -f 1 -d ' ')}" test_file