Por que meu script simples vim não funciona para o caractere de tabulação?

3

Este é meu script simples de vim

#!/usr/bin/vim

%norm f^ID
%norm $i,
%!awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'

A primeira linha exclui tudo depois da guia (^ I) o segundo adiciona um "," depois de cada linha a terceira linha de conversão para coluna. Se eu usei os três comandos separados é perfeito Mas quando eu fiz

:source myscript.vim

Somente o segundo e o terceiro comando são aplicados, o primeiro com o caractere de tabulação não. Por quê?

    
por elbarna 11.11.2018 / 22:05

2 respostas

2

Se o ^I for os dois caracteres ^ e I , o primeiro comando procuraria o caractere ^ e inseriria ( I ) a D no início dessas linhas.

Você deve inserir um caractere de tabulação literal (com Ctrl + V guia ), onde agora você tem ^ e I .

Alternativamente, apenas use (algo como)

%!cut -f 1 | awk -v ORS=', ' '{ print }'

Isso seleciona a primeira coluna delimitada por tabulações com cut e, em seguida, reformata as linhas resultantes em colunas separadas por espaço de vírgulas.

Mais curto, mas apenas vírgulas (não espaço de vírgula) entre as colunas resultantes:

%!cut -f 1 | tr '\n' ','
    
por 11.11.2018 / 23:05
1

Solução alternativa encontrada, em vez de inserir o ^I , eu simplesmente digito ..uma guia pressionada após f (f + TAB D) Então meu script agora é

#!/usr/bin/vim
#the space after f is not a space,is a tab so press tab

%norm f D
%norm $i,
%!awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'

Testado e funciona perfeitamente.

    
por 11.11.2018 / 23:35

Tags