2014-01-06 3 views
2

Я работаю над длинным и сложным архитектурным графом. Отступ документа смешивает вкладки, пробелы и уровни отступов, что сводит меня с ума.Auto-indenting graphviz .dot file

Есть ли простой способ автоматически отступать graphviz .dot файлов в среде Linux?

Чистым инструментом командной строки было бы лучше, но плагины для популярных редакторов, таких как vim, были бы хорошим решением.

Update:

ВИМ отступы есть ошибка с : в именах узлов в краях. Например, server_a:event -> log_server; заставляет следующую строку отступать, предположительно, потому что : анализируется как объявление блока (см. Комментарии к Harry Pehkonen's answer). Цитирование имени узла (например, "server_a":event -> log_server;) решает эту проблему:

#!/usr/bin/python3 

import re 

dot=open('components.dot').read() 
reg=re.compile("(\s)(\S+)(\:.*\-\>)") 
print(reg.sub(r'\1"\2"\3', dot)) 

ответ

2

Vim имеет точечное знание синтаксиса из коробки, и, кажется, повторно отступ точечных файлов для меня.

Я удалил все отступы, пошел в верхней части файла, и сделал = G

Ваши глобальные вкладки, связанные значения определяют, следует ли использовать вкладки/пространства, сколько и т.д.

Если вы хотите, вы можете создать сценарий с:

> vim -W reIndentAndSave whatever.dot 

редактировать свои многоточия файл, повторно отступы сверху с

gg=G 

... Сохранить

:x 

Затем для каждого файла, который вы хотите повторно отступа с помощью сценария, который вы только что записали,

> vim -s reIndentAndSave somegraph.dot 
+0

Спасибо! Проблема в том, что ':' в ребрах приводят гайки vim. Он рассматривает их как новые кодовые блоки. –

+1

@AdamMatan Я понимаю, что вы имеете в виду. Я смог работать, помещая кавычки, по крайней мере, из одного из узлов. FAIL: node0: port0 -> node1: port1; SUCCEED: "node0": port0 -> node1: port1 ;. Тем не менее, это усложняет любую попытку автоматизировать его :( –

+0

Не совсем - я могу regex решить это. Будем держать вас в курсе. Спасибо! –

1

В Emacs, если буфер имеет режим, который поддерживает отступ, вы можете повторно выделить целый буфер следующим образом: C-x h, чтобы выбрать весь буфер, а затем indent-region.

Это интерактивный не сценарий, но он работает.

Если ваш emacs, который имеет , вы можете попробовать.

Тем не менее, я не полностью удовлетворен результатом в этом конкретном режиме, так как он не имеет замыкающих скобок, выровненных с открывающимися скобами (по крайней мере, с graphviz-dot-mode.el Версия 0.3.6, датировка 19/02/2011).

Смежные вопросы