2010-12-16 5 views
4

Я хотел бы переформатировать код, который выглядит следующим образом:Есть ли способ автоматически форматировать фигурные скобки с помощью Vim?

if (cond) { 
    foo; 
} 

в

if (cond) 
{ 
    foo; 
} 

Поскольку это код C, я смотрел на cindent/cinoptions использовать с =, но это кажется он не имеет отношения к многострочным правилам.

Я искал formatoptions для использования с gq, и это не представляется возможным.

Возможно ли это использовать параметры по умолчанию Vim или использовать определенный плагин или функцию?

ответ

4
:%s/^\(\s*\).*\zs{\s*$/\r\1{/ 

Разбивка:

^\(\s*\) = захватить пробелы в начале строки

.* = все остальное

\zs = начать замену после этого

{ = открытый кудрявых скобка

\s*$ = конечные пробелы до конца строки

\r\1{ = новая строка, захваченный пробельных, скрепляющей

5

Я не знаю, если это полностью решает проблему, но если это операция на один выстрел, вы можете попробовать регулярные выражения:

:%s/^\(\s*\)\(.*)\)\s*{\s*$/\1\2^M\1{/ 

Обратите внимание, что ^M является управляющим символом, который обычно генерируется (в зависимости от вашего терминала), нажимая CTRL-V, а затем ENTER.

EDIT: Как было отмечено в комментариях Джей и ZYX, \r это лучший способ вставки разрыва строки в замещаемой строки. Я не знал об этом, большое спасибо за намек.

+1

Зачем использовать `^ M`? Как насчет `\ r`? – Jay 2010-12-16 16:58:26

+0

Он работает, но я бы предпочел, чтобы он был доступен через существующий вариант. Тем не менее я мог бы использовать ваше регулярное выражение в пользовательской функции, отображаемой на + что-то. Если другого решения нет, я приму свой ответ. Спасибо за ваш вклад! – 2010-12-16 17:02:16

+0

@Jay: потому что это не работает на * всех * машинах, над которыми я работаю, но это хороший вариант, если вы работаете только с MacOS. – soulmerge 2010-12-16 17:31:21

1

Я не знаю, можете ли вы сделать это внутри самого vim, но вы можете попробовать команду BSD indent с опцией -bl. С помощью курсора на первом { вы можете ввести !%indent -bl.

4

При установке Artistic Style вы можете сделать что-то вроде:

:set formatprg=astyle\ -b 

Затем используйте gq переформатировать куски код.выделенный текст

Если вы хотите, чтобы это позволило каждый раз, когда вы редактируете файл C, вы можете добавить следующие строки в ваш файл .vimrc.

autocmd BufNewFile,BufRead *.c set formatprg=astyle\ -b 
Смежные вопросы