vim: masquer les n premières lettres de toutes les lignes d'un fichier


12

J'analyse le fichier journal à l'aide de vim et le format ressemble à ceci

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

Depuis la plupart du temps, je me fiche de la date et de l'heure. Je souhaite les masquer et me concentrer uniquement sur les colonnes Nom et LogTexte (pour enregistrer une partie de l'écran). Depuis les trois premières colonnes occupent toujours les 35 premières lettres d'une ligne. Existe-t-il un moyen de faire en sorte que vim n'affiche pas les 35 premières lettres de chaque ligne?


Je ne sais pas comment vous le faites dans vim, mais si cela ne vous dérange pas de créer un fichier temporaire, vous pouvez exécuter cut -c36- logfile > logfile_with_first_35_chars_missing, puis revoir cela.
Warwick

Réponses:


7

Vous avez demandé comment masquer les premières lettres, ne pas les supprimer ou les faire défiler hors de vue - alors voici comment les masquer:

Masquer le texte dans vim en utilisant masquer

Vous pouvez utiliser la correspondance , combinée avec la mise en évidence de la syntaxe et la fonction de masquage pour ne pas afficher les caractères correspondants à l'intérieur des lignes.

Pour masquer les 25 premiers caractères de chaque ligne:

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

Pour masquer uniquement les lignes avec la ponctuation d'une date à la place:

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

Pour afficher:

:syn clear Concealed
:set conceallevel=0

À quoi cela ressemble normalement:

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

ressemblera à ceci après avoir exécuté les deux premières commandes:

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


Voir aussi - à l'intérieur vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Faites-moi savoir si cela ne se comporte pas comme ça - il y a peut-être un autre paramètre que je ne connais pas - je vais le faire fonctionner.)


1
Fonctionne bien, je pense que vim doit être compilé avec l' +concealoption (la mienne est) pour que cela fonctionne. Aussi bon à faire set concealcursor=ncpour empêcher l'expansion de la ligne du curseur.
user881300

Oui, l' +concealoption de fonctionnalité est standard comme certaines années. Dommage que ce ne soit pas plus connu maintenant. C'est vraiment génial et flexible. Donne beaucoup de nouvelles options ...
Volker Siegel

8

Utilisez la fonctionnalité de filtre de vim . Courir:

:%!cut -b36-

pour exécuter le contenu de votre tampon via la cutcommande, en ne conservant que les octets 36 et suivants. %signifie exécuter la totalité du tampon et remplacer son contenu par la sortie, puis !la commande filter, avec le reste de la ligne comme programme à exécuter. Cela ne modifie pas le fichier sous-jacent sauf si vous enregistrez ensuite le tampon par-dessus.

Pour récupérer le tampon d'origine non rogné, vous pouvez l'utiliser :e, à condition qu'il soit soutenu par un vrai fichier.


Et puis utiliser %!cat %pour le récupérer? Cela fonctionne très bien et je peux utiliser un mappour basculer entre ces deux
user881300

Oui, cela fonctionnera, tant que vous avez un vrai fichier sauvegardant votre tampon.
Michael Homer

3
@Michael Homer: Cela fonctionnera désormais avec les caractères unicode.
cuonglm

6

Je pense que le défilement horizontal correspond davantage à ce que vous recherchez .

Z est la touche de commande de défilement horizontal, suivie d'une direction pour se déplacer avec la touche fléchée gauche ou droite.

Tout :set nowrapd' abord pour désactiver le retour à la ligne. Appuyez ensuite sur z, 35, pour faire défiler 35 places.


C'est très utile lors de la lecture des journaux, merci!
Fabio F.

ok, super pour une seule page, mais ... Comment faire une page vers le bas ou une page vers le haut sans que le curseur ne saute à nouveau au début de la ligne?
elysch

vient de trouver comment le faire dans la réponse @ user2987828: en utilisant:set nosol
elysch

Placez le curseur sur le dernier caractère que vous souhaitez masquer. Alors tapez ...[Esc] z s
roblogic

2

En mode commande, essayez:

:%s/^.\{35}//
  • %s/pat/sub/: remplacer chaque occurrence de pat par sub
  • ^.\{35}: correspond aux 35 premiers caractères de la ligne

Cette commande supprime les 35 premiers caractères de chaque ligne. Vous pouvez lire :h regular-expressionpour plus de détails sur l'expression régulière dans vim.


1

Il existe une solution facile à retenir, sans modifier les tampons ou les fichiers. Placez votre curseur sur le premier caractère ( Lsur votre exemple) de la partie de fichier que vous souhaitez voir, puis tapez

:set nowrap
zs

La zscommande configurera vi pour que le caractère avec le curseur apparaisse dans la première colonne de l'écran. Assurez-vous que vous n'avez pas saisi :set nosolvos fichiers de configuration.

La g$commande déplacera votre curseur sur la dernière colonne visible.

La g0commande ramènera votre curseur sur la première colonne visible, celle contenant L.

Si une touche déplace le curseur vers la gauche ou la droite hors des colonnes visibles, les fenêtres visibles se déplaceront.


Et la g0commande déplacera votre curseur vers la première colonne visible
elysch
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.