В нашей кодовой базе C++ мы сохраняем строки на 99 столбцов, но 79 некоторые нечетные комментарии мультилинии столбца. Существует ли хорошая стратегия сделать это автоволшебно? Я предполагаю, что режимы уже известны из-за умного присоединения строки комментария и ведущий * вставка.
Очевидно, и код, и комментарии используют одну и ту же опцию textwidth
. Насколько я понимаю, единственный трюк состоит в том, чтобы установить эту опцию динамически:
:autocmd CursorMoved,CursorMovedI * :if match(getline(.), '^\s*\*') == 0 | :setlocal textwidth=79 | :else | :setlocal textwidth=99 | :endif
Здесь критическая часть определяет, когда мы находимся в комментарии. Если вы только форматируете комментарии таким образом:
/*
* my comment
*/
мое регулярное выражение должно работать ... если у вас нет строк в коде, начинающихся с *
(что, я думаю, может произойти в C
, меньше часто в C ++
). Если вы используете такие комментарии:
// comment line 1
// comment line 2
, регулярное выражение написать еще проще. Если вы хотите охватить все возможные ситуации, в том числе угловые, ну ... Думаю, лучше всего было бы определить отдельную функцию обнаружения и вызвать ее из : autocmd
вместо match ( )
.
Я столкнулся с той же проблемой и думаю, что нашел подходящее решение.
Что я хотел, чтобы в моих комментариях был перенос слов, чтобы, когда я печатаю, мне не приходилось беспокоиться о форматировании текста. Это хорошо работает с текстом комментария. Но мне было неудобно форматировать мой код с помощью vim. Поэтому я хотел, чтобы vim выделял все красным после столбца x.
Чтобы сделать это с использованием только кода cpp, вы должны добавить следующее в ваш файл ~ / .vim / ftdetect / cpp.vim.
set textwidth=79
match ErrorMsg '\%>99v.\+'
примечание: возможно, вам придется создать файл и папки, если они не существуют.
Если у вас возникли проблемы с этим, убедитесь, что у вас установлены параметры формата:
formatoptions=croql
Вы можете увидеть это, запустив: set formatoptions внутри vim.