2016-10-19 2 views
0

Я ищу способ иметь некоторый случайный текст как этотVIM: переформатировать все скобки, скобки и блочные скобки одинаково

[a: b -> {a, b, c}, d<1, 2>, b: [2, 3], (a, b)] 

преобразованной к чему-то более читаемой, например:

[ 
    a: b -> { 
     a, 
     b, 
     c 
    }, 
    d<1, 2>, 
    b: [ 
     2, 
     3 
    ], 
    (
     a, 
     b 
    ) 
] 

Кто-нибудь знает какой-то способ переформатировать текст с помощью скобок, похожих на пример? Не важно, что формат выглядит точно так же, как и выше, это просто для читаемости (тексты намного длиннее a, b или c).

В настоящее время я использую это отображение:

%j<CR>:%s/[\[{]\\|[\]}],\\|,/&\r/g<CR>gg=Ggg:nohls<CR> 

Это работает не очень хорошо, и требует некоторой дополнительной очистки.

ответ

1

Я не думаю, что существует общий способ разделения общего текста на многострочные компоненты, как вы описываете. У меня есть плагин под названием splitjoin, который пытается сделать что-то подобное, но он работает для конкретных конструкций на определенных языках программирования. Например, lists and tuples in python. Если вы посмотрите на полный файл справки, вы можете обнаружить, что он работает для вас, но я не могу сказать точно. Возможно, вам удастся снова использовать некоторые из splitting and joining functions.

Другим моим плагином, который может помочь, является sideways, поскольку он предоставляет текстовый объект для аргументов в списке (который вы можете визуально выбирать и оперировать впоследствии). В моих экспериментах, однако, похоже, что он правильно определяет d<1, 2>, поэтому вам может понадобиться создать your own list definition, который обнаруживает скобки <> (я бы не поместил это в общий плагин из-за 1 < 2 и т. Д.). К сожалению, даже тогда, до этого он путается ->. Если у вас есть все из них в том же списке, я не думаю, что этот плагин может помочь.

Это не очень решение, просто направление, я полагаю. Если это код определенного языка программирования, он может помочь определить, какой из них он есть.

+1

Я попробовал splitjoin и посмотрел на бок. Splitjoin, похоже, делает что-то подобное, но, похоже, он работает неправильно, когда я выбираю обратные вызовы из разных языковых плагинов. В общем, я действительно думаю, что плагин не требуется для этой проблемы. Я просто нашел плагин genindent, который, кажется, подходит. Я попробую. – steffen

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