vim: oculta as primeiras n letras de todas as linhas em um arquivo


12

Estou analisando o arquivo de log usando o vim e o formato fica assim

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

Desde Na maioria das vezes eu não me importo com data e hora. Eu quero ocultá-los e focar apenas nas colunas Nome e LogText (para salvar algumas propriedades da tela). Como as três primeiras colunas sempre ocupam as primeiras 35 letras em uma linha. Existe uma maneira de fazer com que o vim não exiba as primeiras 35 letras de cada linha?


Não sei como você faz isso no vim, mas se você não se importa em criar um arquivo temporário, pode executar cut -c36- logfile > logfile_with_first_35_chars_missinge depois revisá-lo.
Warwick

Respostas:


7

Você perguntou sobre como ocultar as primeiras letras, não para removê-las ou rolá-las para fora da vista - e aqui está como realmente escondê-las:

Ocultar texto no vim usando ocultar

Você pode usar a correspondência combinada com o destaque da sintaxe e o recurso ocultar para realmente não mostrar caracteres correspondentes dentro das linhas.

Para ocultar os primeiros 25 caracteres de cada linha:

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

Para ocultar apenas as linhas com a pontuação de uma data:

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

Para mostrar:

:syn clear Concealed
:set conceallevel=0

O que parece 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

ficará assim depois de executar os dois primeiros comandos:

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


Veja também - dentro vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Deixe-me saber se ele não se comportar dessa maneira - pode haver mais configurações das quais eu não conheço mais ou menos - vou fazê-lo funcionar.)


1
Funciona bem, acho que o vim precisa ser compilado com a opção +conceal(a minha é) para que isso funcione. Também é bom fazer set concealcursor=ncpara impedir que a linha do cursor se expanda.
user881300

Sim, a +concealopção de recurso é padrão como alguns anos. Triste que não seja mais conhecido até agora. É realmente ótimo e flexível. Dá lotes de novas opções ...
Volker Siegel

8

Use a funcionalidade de filtro do vim . Corre:

:%!cut -b36-

para executar o conteúdo do seu buffer através do cutcomando, mantendo apenas os bytes 36 e posteriores. %significa executar todo o buffer e substituir seu conteúdo pela saída, então !é o comando filter, com o restante da linha como o programa a ser executado. Isso não modifica o arquivo subjacente, a menos que você salve o buffer por cima.

Para recuperar o buffer não aparado original, você pode usá-lo :e, desde que apoiado por um arquivo real.


E depois usar %!cat %para recuperá-lo? Isso funciona muito bem e eu posso usar um mappara alternar entre esses dois
user881300

Sim, isso funcionará, desde que você tenha um arquivo real apoiando seu buffer.
Michael Homer

3
@ Michael Homer: Isso agora funcionará com caracteres unicode.
31514 cuonglm

6

Eu acho que mais alinhado com o que você está procurando é a rolagem horizontal .

Z é a tecla de comando de rolagem horizontal, seguida por uma direção para mover com a tecla de seta esquerda ou direita.

Primeiro :set nowrappara desativar a quebra de linha. Pressione z, 35, para percorrer 35 espaços.


Isso é muito útil ao ler registros, obrigado!
Fabio F.Jul

ok, ótimo para uma única página, mas ... Como fazer a página para baixo ou para cima sem o cursor pular novamente para o início da linha?
elysch

só descobriu como fazê-lo na resposta @ user2987828: usando:set nosol
elysch

Coloque o cursor no último caractere que você deseja ocultar. Então digite ...[Esc] z s
roblogic 02/02

2

No modo de comando, tente:

:%s/^.\{35}//
  • %s/pat/sub/: substitua cada ocorrência de pat por sub
  • ^.\{35}: corresponde aos primeiros 35 caracteres da linha

Este comando remove os primeiros 35 caracteres de cada linha. Você pode ler :h regular-expressionpara obter mais detalhes sobre expressões regulares em vim.


1

Existe uma solução fácil de lembrar, sem modificar buffers ou arquivos. Coloque o cursor no primeiro caractere ( Lno seu exemplo) da parte do arquivo que você deseja ver e digite

:set nowrap
zs

O zscomando irá configurar o vi para que o caractere com o cursor apareça na primeira coluna da tela. Verifique se você não digitou :set nosolseus arquivos de configuração.

O g$comando moverá o cursor para a última coluna visível.

O g0comando retornará o cursor para a primeira coluna visível, a que contém L.

Se alguma tecla mover o cursor para a esquerda ou direita das colunas visíveis, as janelas visíveis serão deslocadas.


E o g0comando moverá o cursor para a primeira coluna visível
elysch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.