Criando e mantendo fluxogramas no Vim


7

Aqui está um fluxograma simples baseado em texto que fiz no Vim para uma postagem no blog:

               [DNS request]
                    |
                    |
                 [Adsuck]
                    |
                    |
                 <block?>
                    |
                   / \
                  /   \
              <YES>    \-> <NO> --> [unbound lookup]
                |
                v
            [noop.py]
                |
                |
        <Have noop script?>
                |
               / \
              /   \
           <YES>   \-> <NO> --> [serve empty GIF]
             |
             v
    [serve noop script]

O problema é que isso pode ser bastante trabalhoso; mudar uma coisa e você precisa mudar tudo.

Há algo que eu possa fazer para facilitar isso? Eu realmente não me importo com o layout acima do fluxograma como tal , desde que pareça um fluxograma-y, tudo bem. Os fluxogramas também podem ser horizontais no que me diz respeito, embora eu prefira vertical como acima.

Respostas:


14

Em vez de usar o vim para tentar manipular diretamente a arte ASCII, por que não usar o vim para editar um formato de arquivo que define um gráfico?

O formato de ponto é uma maneira bastante compacta de representar gráficos. Uma aproximação aproximada do gráfico que você descreveu no seu exemplo seria assim:

digraph {
  start -> adsuck;
  adsuck -> block;
  block -> noop[label="yes"];
  block -> unbound[label="no"];
  noop -> serve_noop[label="yes"];
  noop -> serve_empty[label="no"];
}

Então você pode usar o módulo Graph :: Easy do Perl para renderizar o gráfico em vários formatos de saída, incluindo texto ASCII. Também pode produzir páginas HTML, SVG, PNG etc.

Instale o Perl, se não o tiver, instale o Graph :: Easy ( cpanm Graph::Easyveja aqui para detalhes). Isso fornecerá uma graph-easyferramenta de linha de comando. Crie yourgraph.dotou o que for (o vim já possui conhecimento de sintaxe do formato de ponto e também há plugins relacionados ).

Execute graph-easy --as ascii yourgraph.dot output.txte você obterá algo como isto:

                      +-------------+
                      |    start    |
                      +-------------+
                        |
                        |
                        v
                      +-------------+
                      |   adsuck    |
                      +-------------+
                        |
                        |
                        v
+------------+  no    +-------------+
|  unbound   | <----- |    block    |
+------------+        +-------------+
                        |
                        | yes
                        v
+------------+  yes   +-------------+
| serve_noop | <----- |    noop     |
+------------+        +-------------+
                        |
                        | no
                        v
                      +-------------+
                      | serve_empty |
                      +-------------+

Não é tão bonito, mas é muito mais fácil editar o arquivo de pontos do que manipular toda a arte ASCII. Descobri que este artigo era um artigo muito bom sobre a criação de fluxogramas com o formato de ponto.


-1

Você pode tentar o plug- in DrawIt .

DrawIt é um plugin que permite desenhar linhas à esquerda, direita, cima, baixo e ao longo das duas inclinações. Opcionalmente, pode-se "limitar" as linhas com pontas de seta. Pode-se alterar os caracteres horizontal, vertical, inclinado e cruzado para os caracteres desejados.


Como uso isso para criar e manter fluxogramas?
Martin Tournoij 6/02/15

Como ele é voltado para o desenho de arte ASCII, pode diminuir a quantidade de dor quando você precisar refatorar. Mas @ JoshPetrie provavelmente está certo de que usar dot seria melhor.
Quincy Bowers

2
Leia nossa política sobre respostas para recomendações de plugins e adicione alguns detalhes. Um exemplo específico de como configurar o plugin (se necessário) e ativá-lo seria útil.
200_success
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.