Форматирование комментариев в стиле С (с начальным заполнением и абзацем в середине строки)

и другие vi-подобные редакторы

Модератор: /dev/random

Flagman
Сообщения: 9

Форматирование комментариев в стиле С

Сообщение Flagman »

Подскажите как получить вот из этого:

Код: Выделить всё

/*
********************************************************************************
*************************
* uC/PRODUCT
* The Embedded Product
*
* (c) Copyright 2004-2012; Micrium, Inc.; Weston, FL
*
* All rights reserved.  Protected by international copyright laws.
*
* uC/PRODUCT is provided in source form to registered licensees ONLY.  It is
* illegal to distribute this source code to any third party unless you receive
* written permission by an authorized Micrium representative.  Knowledge of
* the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available.  Your honesty is greatly appreciated.
*
* You can contact us at www.micrium.com.
********************************************************************************
*************************
*/
/*
********************************************************************************
*************************
*
* FILE DESCRIPTION
*
* Filename      :
* Version       :
* Programmer(s) :
********************************************************************************
*************************
* Note(s)       :
********************************************************************************
*************************
*/


Такую конфетку, а потом где Note(s) писать на следующей строке не залезая влево за двоеточие и за ограничение ширины строки?
Заголовки по центру (105 ширина строки). Абзац начинается за звездочками и можно сказать с выравниванием по двум сторонам.
А самое главное как потом там редактировать с возможностью переформатирования опять в конфетку.

Код: Выделить всё

/*
********************************************************************************
*************************
*                                              uC/PRODUCT
*                                         The Embedded Product
*
*                          (c) Copyright 2004-2012; Micrium, Inc.; Weston, FL
*
*              All rights reserved.  Protected by international copyright laws.
*
*              uC/PRODUCT is provided in source form to registered licensees ONLY.  It is
*              illegal to distribute this source code to any third party unless you receive
*              written permission by an authorized Micrium representative.  Knowledge of
*              the source code may NOT be used to develop a similar product.
*
*              Please help us continue to provide the Embedded community with the finest
*              software available.  Your honesty is greatly appreciated.
*
*              You can contact us at www.micrium.com.
********************************************************************************
*************************
*/
/*
********************************************************************************
*************************
*
*                                           FILE DESCRIPTION
*
* Filename      :
* Version       :
* Programmer(s) :
********************************************************************************
*************************
* Note(s)       :
********************************************************************************
*************************
*/


ограничение по строке 105 но форум режет кажется по 80 так что со звездочками перебор небольшой, надо учитывать что они (звездочки) в один ряд.

Понимаю что руками и пробелом можно все сделать, но может есть какие комбо которые позволяют это все делать быстро и непринужденно. Команду center пробовал, она центрует всю строку вместе со звездочкой, а хочется чтобы она не двигалась.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Форматирование комментариев в стиле С

Сообщение drBatty »

вот скрипт:

Код: Выделить всё

#!/bin/sed -rf

1{
    x
    s/.*/          /
    s/ /        /g
    x
}
/^\* /!b
s///
G
s/(.{81}).*/\1/
s/(.*)\n(.*)\2/\2\1/
s/^/* /

Код: Выделить всё

/*
********************************************************************************
*************************
*                                    uC/PRODUCT
*                               The Embedded Product
*
*                (c) Copyright 2004-2012; Micrium, Inc.; Weston, FL
*
*         All rights reserved.  Protected by international copyright laws.
*
*    uC/PRODUCT is provided in source form to registered licensees ONLY.  It is
*   illegal to distribute this source code to any third party unless you receive
*    written permission by an authorized Micrium representative.  Knowledge of
*          the source code may NOT be used to develop a similar product.
*
*    Please help us continue to provide the Embedded community with the finest
*            software available.  Your honesty is greatly appreciated.
*
*                      You can contact us at www.micrium.com.
********************************************************************************
*************************
*/
/*
********************************************************************************
*************************
*
*                                 FILE DESCRIPTION
*
*                                 Filename      :
*                                 Version       :
*                                 Programmer(s) :
********************************************************************************
*************************
*                                 Note(s)       :
********************************************************************************
**********************/
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Flagman
Сообщения: 9

Re: Форматирование комментариев в стиле С

Сообщение Flagman »

drBatty
Спасибо, но я как то думал что можно обойтись только vim, типа выделить блок и в этом выделении уже произвести выравнивание. Вот плагином ":source $VIMRUNTIME/macros/justify.vim" из стандартной поставки и командой gq можно кое что сделать, но я пока не понял по какому принципу он с левого края выравнивает текст но звездочки вроде не трогает.
Надо еще плагины для vim поискать, типа NERD_commenter.vim, вот только мало где есть примеры что они из чего могут отформатировать.
Спасибо сказали: