Como posso criar e manter tabelas facilmente?

28

Aqui está (parte de) uma tabela que eu uso em alguma documentação:

+---------------+------------------------+---------------------------------------+
| TASK NAME     | WHEN                   | DESCRIPTION                           |
+---------------+------------------------+---------------------------------------+
| db:seed       | On every update        | Data required for the application to  |
|               |                        | run; you should always be able to     |
|               |                        | safely execute this multiple times    |
|               |                        | for an update.                        |
| db:truncate   | Manually (dangerous!)  | TRUNCATE all tables but postal_codes  |
| postal_codes  | Once                   | Load the postal_codes table           |
+---------------+------------------------+---------------------------------------+

O problema é que isso é muito complicado de editar; se eu mudar uma coisa, preciso (manualmente) realinhar tudo, que é uma PITA

Existem maneiras mais fáceis de gerenciar isso? Não me importo com o layout exato acima, mas gostaria de manter o empacotamento da terceira coluna ...

Martin Tournoij
fonte
11
Um aparte, se este é reStructuredText, você pode considerar olhando para list-table(recentemente eu convertido muitas mesas para isso, porque as tabelas ASCII são difíceis de manter e diff mal)
ideasman42

Respostas:

35

Eu sou o autor do plugin vim-table-mode . Passei muito tempo criando e aprimorando isso, especialmente com o feedback da comunidade e ele atende exatamente a esse caso de uso.

Um breve início rápido: você entra no 'modo de tabela' com o :TableModeEnablecomando e pode simplesmente digitar:

||
| MOVIE | QUOTE|
||
| Blade Runner | Like tears in the rain |
| Monty Python's quest for the holy grail | Are you suggesting that coconuts migrate? |
||

E o vim-table-mode cuidará automaticamente do alinhamento imediatamente, para que fique com:

|-----------------------------------------+-------------------------------------------|
| MOVIE                                   | QUOTE                                     |
|-----------------------------------------+-------------------------------------------|
| Blade Runner                            | Like tears in the rain                    |
| Monty Python's quest for the holy grail | Are you suggesting that coconuts migrate? |
|-----------------------------------------+-------------------------------------------|

Ao editar a tabela posteriormente, o modo vim-table também cuidará do alinhamento para você.

Você pode sair do 'modo mesa' com :TableModeDisable.


Seu principal é criar facilmente tabelas que serão formatadas automaticamente conforme você digita. Ele oferece muitos mapeamentos para mover e manipular tabelas também (um particularmente útil é <Leader>tdcremover uma coluna inteira). Tudo o que você precisa fazer é ativar o modo de tabela, que será ativado e você poderá digitar sem se preocupar com a formatação.

Possui muito mais recursos do que os exibidos aqui, como a capacidade de alinhar colunas à direita com uma pequena dica no cabeçalho. Ele também possui um mecanismo de fórmula de planilha simples que permite definir fórmulas e executar cálculos como faria uma planilha regular.

Ele foi desenvolvido para ser extremamente flexível e configurável, para que você possa alterar vários aspectos das tabelas e bordas criadas.

Eu também criei alguns screencasts tentando mostrar seus poderes. Este screencast é o mais recente , mas observe que houve muitas melhorias desde então.

Dhruva Sagar
fonte
5
Obrigado; Eu editei sua resposta um pouco para adicionar algumas informações práticas de uso (ele parecia um pouco como um anúncio antes) ... Uma coisa que não pude fazer com o modo vim-table é o empacotamento da terceira coluna como no exemplo da minha pergunta ... Isso é possível?
Martin Tournoij
@Carpetsmoker obrigado pela edição. Bem, você pode envolvê-lo manualmente, não há como fazer isso automaticamente.
Dhruva Sagar
6

Se você pode usar sede column, uma solução de linha de comando que se aproxima seria:

!sed 's/[- ]*\([+|]\)/'$'\x01''\1/g' | column -ts $'\x01' | sed '/^[-+ ]*$/s/ /-/g'

Você pode combinar isso com a seleção visual e / '<,'>ou com os números das linhas.

Contras:

  • Usos sede column. Vim é incidental. Os sedcomandos provavelmente podem ser alterados para :substitutecomandos do vim , mas columnsão cruciais.
  • Os separadores de linha ( ---...-) são preenchidos, mas tenho suspeitas sobre sua confiabilidade.
  • Eu não sei o quão portátil $'\x01'é.

Fontes:

muru
fonte
Pequenas falhas de lado (o que provavelmente pode ser fixa), este parece promissor ... A única coisa que não pode ser feito é o envolvimento da 3ª coluna embora: - /
Martin Tournoij
5

Se você não deseja instalar nenhum plug-in e deseja editar tabelas mantendo o alinhamento:

- use o modo VREPLACE integrado , ativado por gR.

(Verifique se você possui a versão mais recente do vim e verifique se ele foi compilado com o +vreplacerecurso, digitando vim --versionno terminal)

insira a descrição da imagem aqui (minha linha de status está configurada para mostrar REPLACE nos modos REPLACE e VREPLACE)

Se você quiser saber mais sobre os modos REPLACE e VREPLACE , consulte este artigo .

Rossijonas
fonte
3

Eu criei a tablign da ferramenta de linha de comando para esse fim; também funciona a partir do vim. Basta instalar com

[sudo -H] pip3 install tablign

marque a tabela no vim e ligue

:'<,'>:!tablign

(o vim preenche os primeiros caracteres para você, se você marcou a tabela.)

Ainda não pode fazer larguras fixas de colunas, mas isso pode ser adicionado se necessário.

insira a descrição da imagem aqui

Nico Schlömer
fonte