vim: oculta las primeras n letras de todas las líneas en un archivo


12

Estoy analizando el archivo de registro usando vim y el formato se ve así

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

Como la mayoría de las veces no me importa la fecha y la hora. Quiero ocultarlos y solo enfocarme en las columnas Nombre y LogText (Para guardar un estado de pantalla). Dado que las primeras tres columnas siempre ocupan las primeras 35 letras en una línea. ¿Hay alguna manera de hacer que vim no muestre las primeras 35 letras de cada línea?


No sé cómo lo hace en vim, pero si no le importa crear un archivo temporal, puede ejecutarlo cut -c36- logfile > logfile_with_first_35_chars_missingy luego revisarlo.
Warwick

Respuestas:


7

Preguntó sobre cómo ocultar las primeras letras, no eliminarlas o desplazarlas fuera de la vista, así que aquí está cómo ocultarlas realmente:

Ocultar texto en vim usando ocultar

Puede utilizar la coincidencia , combinada con el resaltado de sintaxis y la función de ocultación para no mostrar caracteres coincidentes dentro de las líneas.

Para ocultar los primeros 25 caracteres de cada línea:

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

Para ocultar solo las líneas con la puntuación de una fecha:

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

Para mostrar:

:syn clear Concealed
:set conceallevel=0

Lo que se ve así normalmente:

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

se verá así después de ejecutar los dos primeros comandos:

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


Ver también - adentro vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Avíseme si no se comporta así, puede que haya más ajustes que desconozco o no, lo pondré a funcionar).


1
Funciona bien, creo que vim necesita ser compilado con la +concealopción (la mía es) para que esto funcione. También es bueno hacer set concealcursor=ncpara evitar que la línea del cursor se expanda.
user881300

Sí, la +concealopción de función es estándar como algunos años. Es triste que ya no sea más conocido. Es realmente genial y flexible. Ofrece muchas opciones nuevas ...
Volker Siegel

8

Utilice la funcionalidad de filtro de vim . Correr:

:%!cut -b36-

para ejecutar el contenido de su búfer a través del cutcomando, conservando solo los bytes 36 en adelante. %significa ejecutar todo el búfer y reemplazar su contenido con la salida, luego !es el comando de filtro, con el resto de la línea como el programa a ejecutar. Esto no modifica el archivo subyacente a menos que guarde el búfer en la parte superior.

Para recuperar el búfer original no recortado, puede usarlo :e, siempre que esté respaldado por un archivo real.


¿Y luego usarlo %!cat %para recuperarlo? Esto funciona muy bien y puedo usar una mappara alternar entre estos dos
user881300

Sí, eso funcionará, siempre que tenga un archivo real que respalde su búfer.
Michael Homer

3
@Michael Homer: ahora funcionará con caracteres Unicode.
cuonglm

6

Creo que más en línea con lo que estás buscando es el desplazamiento horizontal .

Z es la tecla de comando de desplazamiento horizontal, seguida de una dirección para moverse con la tecla de flecha izquierda o derecha.

Primero :set nowrapen deshabilitar el ajuste de línea. A continuación, presione z, 35, para desplazarse 35 plazas.


Esto es muy útil al leer registros, ¡gracias!
Fabio F.

ok, genial para una sola página, pero ... ¿Cómo hacer una página hacia abajo o hacia arriba sin que el cursor salte nuevamente al comienzo de la línea?
elysch

acabo de encontrar cómo hacerlo en la respuesta @ user2987828: usando:set nosol
elysch

Coloque el cursor sobre el último carácter que desea ocultar. Luego escriba ...[Esc] z s
roblogic

2

En modo comando, intente:

:%s/^.\{35}//
  • %s/pat/sub/: reemplaza cada aparición de pat con sub
  • ^.\{35}: coincide con los primeros 35 caracteres de la línea

Este comando elimina los primeros 35 caracteres de cada línea. Puede leer :h regular-expressionpara obtener más detalles sobre la expresión regular en vim.


1

Hay una solución fácil de recordar, sin modificar buffers o archivos. Coloque el cursor en el primer carácter ( Len su ejemplo) de la parte del archivo que desea ver, luego escriba

:set nowrap
zs

El zscomando configurará vi para que el carácter con el cursor aparezca en la primera columna de la pantalla. Asegúrese de no escribir :set nosolsus archivos de configuración.

El g$comando moverá el cursor a la última columna visible.

El g0comando moverá el cursor hacia atrás a la primera columna visible, la que contiene L.

Si alguna tecla mueve el cursor hacia la izquierda o hacia la derecha fuera de las columnas visibles, entonces las ventanas visibles cambiarán.


Y el g0comando moverá el cursor a la primera columna visible
elysch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.