Como colocar texto em colunas (no vim ou no shell)

6

Eu tenho uma necessidade freqüente de manipular manualmente o texto delimitado por tabulações para entrada de dados e outras finalidades. Quando faço isso, ajuda se o texto estiver alinhado corretamente nas colunas. Por exemplo (assumindo guias de 4 espaços):

# original format
abcdefghijklmnop    field2
abcdefgh    field2
abcdefghijkl    field2

# ideal format
abcdefghijklmnop    field2
abcdefgh            field2
abcdefghijkl        field2

Estou muito familiarizado com o uso do utilitário column para colocar o texto em coluna dessa maneira, mas o problema é que ele usa espaços para alinhar as colunas e eu preciso especificamente de guias. Esse requisito também parece excluir o plug-in Tabularize.

Existe alguma maneira de eu poder colocar em coluna texto com abas especificamente, dentro de vim ou no shell? Parece que eu poderia fazer isso com groff / tbl , mas honestamente eu prefiro colocar em colunas à mão do que mexer com isso ...

    
por kine 29.10.2013 / 20:59

5 respostas

5

O csv.vim - Um plug-in de tipo de arquivo para arquivos csv também suporta arquivos delimitados por tabulação e tem :ArrangeColumn e :UnArrangeColumn comandos para isso.

    
por 30.10.2013 / 08:40
5

Defina o tamanho de exibição da guia como maior que seu campo mais longo.

# original format
abcdefghijklmnop<Tab>field2
abcdefgh<Tab>field2
abcdefghijkl<Tab>field2
I have spaces!<Tab>field2

No Vim,

:echo len("abcdefghijklmnop") " Reports 16
:set noexpandtab tabstop=17

Você provavelmente pode condensar isso em um comando, mas não sei como. Se você estiver executando um Vim moderno, :set list indicará hard tabs com um caractere sofisticado (que você também pode configurar). Caso contrário, eles serão exibidos como ^I (não o que você deseja) ou espaço em branco.

# displays like this
abcdefghijklmnop>field2
abcdefgh>        field2
abcdefghijkl>    field2
I have spaces!>  field2

EDIT: Um exemplo de um verdadeiro vim!

    
por 01.06.2014 / 23:48
1

Quando você tiver espaço adequadamente alinhado à tabela (com o Tabularize mencionado ou o plug-in alternativo Alinhar ), você poderá converter os espaços em guias com os seguintes comandos :

:%retab!
:%substitute/ \+/\t/g

O primeiro comando substitui o recuo por tabulações sempre que possível sem alterar as larguras (isso pressupõe que você tenha :set noexpandtab ), o segundo então transforma os espaços que sobraram para as tabulações (maiores).

    
por 29.10.2013 / 22:09
0

Usando o plug-in godlygeek / tabular , você pode selecionar

:%Tabularize /\t.*/
    
por 02.06.2018 / 15:01
-1

As colunas separadas por tabulações só funcionam quando o programa usado para exibi-las é capaz de expandir / reduzir caracteres de tabulação para honrar seu significado real. Vim, e acredito que a maioria dos outros editores de texto simples, é incapaz de usar guias para tabulação porque as guias têm uma única largura fixa. O Vim pode usar uma mistura de abas e espaços para obter um resultado similar, mas o que você ganha obviamente não é mais separado por abas.

Você precisaria converter todas essas misturas de tabulação / espaços em guias únicas em cada gravação.

Em suma, um editor de texto simples provavelmente não é a ferramenta certa para o trabalho.

    
por 30.10.2013 / 08:23