¿Existe un comando para determinar la longitud de una línea más larga en vim? Y para agregar esa longitud al comienzo del archivo?línea más larga en vim?
Respuesta
El comando wc de Gnu tiene una opción -L --max-line-length que imprime la longitud máxima de línea del archivo. Vea el gnu man wc. El freebsd wc también tiene -L, pero no --max-line-length, ver freebsd man wc.
¿Cómo usar esto de vim? El comando:
:%!wc -L
Filtrará el archivo abierto a través de wc -L y hará que el contenido del archivo tenga la longitud de línea máxima.
para retener el contenido del archivo y poner la longitud máxima de línea en la primera línea de hacer:
:%yank
:%!wc -L
:put
En lugar de utilizar wc, Find length of longest line - awk bash describe cómo usar awk para encontrar la longitud de la línea más larga.
Bien, ahora para una solución Vim pura. Soy algo nuevo en scripting, pero aquí va. Lo que sigue se basa en la función FilterLongestLineLength de textfilter.
function! PrependLongestLineLength ()
let maxlength = 0
let linenumber = 1
while linenumber <= line("$")
exe ":".linenumber
let linelength = virtcol("$")
if maxlength < linelength
let maxlength = linelength
endif
let linenumber = linenumber+1
endwhile
exe ':0'
exe 'normal O'
exe 'normal 0C'.maxlength
endfunction
command PrependLongestLineLength call PrependLongestLineLength()
poner este código en un archivo .vim (o su .vimrc) y: el archivo fuente. A continuación, utilice el nuevo comando:
:PrependLongestLineLength
Gracias, averiguar esto fue divertido.
Estaba en algo así como! Awk '{print (length ($ 0))}'
Incluso si la solución de Jonathan (pre-vim-7) es un poco compleja, tiene razón al usar 'virtcol()', las tabulaciones no se contarán como '1'. Me temo que todas las demás soluciones basadas en wc, awk, perl, etc. no darán las respuestas correctas. –
Si trabaja con tabulaciones ampliadas, un simple
:0put=max(map(getline(1,'$'), 'len(v:val)'))
es suficiente.
De lo contrario, creo que necesitaremos la siguiente (que se puede encontrar como el último ejemplo en :h virtcol()
, menos el -1):
0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))
No llamaría a esa línea "simple". Sin embargo, funciona, así que no tengo quejas. – sleske
: wc -l%
en lugar de
:%! wc -L
Para agregar esa longitud al principio del archivo:
: 0r! wc -L% | cut -d '' -f1
La ventaja de '%! Wc -L' es que funciona en almacenamientos intermedios no guardados o sin nombre. – wchargin
- 1. alinear al palabra más larga
- 2. Vim: moverse rápidamente dentro de la línea larga
- 3. Ruta simple más larga
- 4. Encuentra más larga secuencia
- 5. En VIM, ¿cómo rompo una línea realmente larga en varias líneas?
- 6. Insertar saltos de línea en cadena larga - Ajuste de línea
- 7. Línea horizontal en vim
- 8. Seleccionar TimeRange común más larga
- 9. La subsecuencia más larga común
- 10. Subsección palindrómica común más larga
- 11. Cadena más larga en numpy object_ array
- 12. Ruby palabra más larga en matriz
- 13. PHP más corta/cadena más larga en la gama
- 14. PHP cadena larga sin línea nueva
- 15. vim fin de línea
- 16. PowerShell: ¿Por qué Out-File rompe la línea larga en líneas más pequeñas?
- 17. "grep: línea demasiado larga" mensaje de error
- 18. Cómo calcular la racha más larga en SQL?
- 19. ¿Cómo puedo romper esta larga línea en Python?
- 20. subcadena más larga que aparece n veces
- 21. Igraph: Obtener la distancia geodésica más larga
- 22. problema de subcadena común más larga
- 23. ¿Obtener una stacktrace más larga de FastMM?
- 24. expresión regular más larga posible a juego
- 25. Subcadena común más larga de más de dos cadenas - Python
- 26. ¿Cómo leo una línea arbitrariamente larga en C?
- 27. .NET - Línea larga en RichTextBox Envuelto después de 3.510 caracteres
- 28. ¿Cómo mostrar la línea vertical para envolver la línea en Vim?
- 29. ¿Puedo tener línea de estado de línea múltiple en Vim?
- 30. vim memoria de línea limitada
¿Se debe hacer esto en Vim? Lo pregunto porque es algo muy específico que quiero hacer, y probablemente sería más rápido armar un script de Python/Perl/Ruby para hacerlo si lo necesita en múltiples archivos. – ZoogieZork
Esto suena como si estuviera buscando la solución incorrecta al problema real. ¿Qué estás tratando de lograr exactamente? – soulmerge
@ ZoogieZork: a veces, vim es suficiente, y lo suficientemente simple, no es necesario usar herramientas externas. –