2014-12-13 2 views
2

Чтобы воспроизвести мой вопрос:Vim автоматическая жесткая упаковка длинных комментариев в C++?

$ vim -u NONE test.cpp 
:set nocompatible 
:set tw=20 
:set fo=croql 

Теперь наберите следующий текст:

/* 
    test test test test test test test test test 
*/ 

Обратите внимание, что не существует не ведущая звездочка на линии, содержащей тесты. Vim вставляет это по умолчанию, удаляет его.

Vim должен быть автоматическим обертыванием, но это не так.

Как я могу сделать Vim wrap автоматически в комментариях, и только в комментариях? :set fo+=t работает, но потом все обертывается, и я не хочу автоматической жесткой упаковки для кода.

ответ

3

С моим OnSyntaxChange plugin, вы можете изменить значение параметра 'fo' в зависимости от того, курсор внутри комментария или нет:

call OnSyntaxChange#Install('Comment', '^Comment$', 0, 'a') 
autocmd User SyntaxCommentEnterA setlocal fo+=t 
autocmd User SyntaxCommentLeaveA setlocal fo-=t 
+0

Итак, я думаю, мой ответ должен начаться: «За исключением использования гениального плагина, Vim не может ...» – Ben

3

Извините, но сам Vim не может быть настроен для автоматического обертывания текста в многострочных комментариях, без символа в начале строки. Параметр «комментарии» определяет, как Vim распознает комментарии для автоматической упаковки. Многострочные комментарии должны иметь атрибуты «s», «e» и «m» в опции «комментарии» для распознавания; : help format-comments говорит: «Три комментария должны иметь среднюю строку, потому что иначе Vim не может распознать средние строки».

Тем не менее, вы можете вручную переформатировать такие строки с гд оператора (сокращенная гдд для одной строки) и Вим должны в основном делать то, что вы хотите. Если он немного выключен, вы можете использовать опцию 'formatexpr'.

Возможно, вам лучше использовать только ведущие * в многострочных комментариях или комментарии в стиле //.

Доступны плагины, которые используют области, определяемые синтаксисом, умными способами, которые могут позволить вам обойти эти ограничения. См. Ответ Инго.

+0

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

+0

@IngoKarkat, @Ben Можно ли написать автокоманду, которая выполняет ': set fo + = t', когда курсор находится внутри комментария и': set fo- = t', когда снаружи? – orlp

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