vim: ocultar primeiro n letras de todas as linhas em um arquivo

12

Estou analisando o arquivo de log usando o vim e o formato se parece com isso

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

Desde a maioria das vezes eu não me importo com data e hora. Eu quero escondê-los e apenas se concentrar nas colunas Name e LogText (para salvar algumas propriedades da tela). Desde 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?

    
por user881300 29.07.2014 / 01:19

5 respostas

6

Você perguntou sobre como ocultar as primeiras letras, não para removê-las ou rolá-las para fora da vista. Então, veja como ocultá-las:

Ocultar texto no vim usando ocultação

Você pode usar o matching , combinado com o realce de sintaxe e o recurso ocultar para não mostrar os 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 reexibir:

:syn clear Concealed
:set conceallevel=0

O que parece com isso 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 de vim :% help :syn-match e help :syn-conceal e help 'conceallevel' e help 'concealcursor'

(Deixe-me saber se ele não se comporta assim - pode haver um pouco mais de configuração que eu não estou ciente ou assim - vou fazê-lo funcionar.)     
por 29.07.2014 / 12:36
8

Use a funcionalidade de filtro do vim . Executar:

:%!cut -b36-

para executar o conteúdo de seu buffer por meio do comando cut , mantendo apenas bytes 36 e adiante. % 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 no topo.

Para recuperar o buffer original não truncado, você pode usar :e , desde que seja apoiado por um arquivo real.

    
por 29.07.2014 / 02:04
6

Acho que mais de acordo 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 para a esquerda ou para a direita.

Primeiro :set nowrap para desativar a quebra de linha. Então pressione z , 3 5 , para percorrer 35 espaços.

    
por 29.07.2014 / 11:18
2

No modo de comando, tente:

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

Este comando remove os primeiros 35 caracteres de cada linha. Você pode ler :h regular-expression para mais detalhes sobre a expressão regular em vim .

    
por 29.07.2014 / 04:03
1

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

:set nowrap
zs

O comando zs irá configurar o vi para que o caractere com o cursor apareça na primeira coluna da tela. Certifique-se de que você não digitou :set nosol em seus arquivos de configuração.

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

O comando g0 irá mover o cursor de volta para a primeira coluna visível, a que contém L.

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

    
por 13.02.2015 / 11:16

Tags