В нашей базе кода на С++ мы сохраняем 99 строк столбцов, но многострочные комментарии 79-нечетных столбцов. Есть ли хорошая стратегия, чтобы сделать это автоматически? Я предполагаю, что режимы уже известны из-за умного комментария, соединяющего строки и ведущей * вставки.
Vim отличается шириной текста для многострочных комментариев C?
Ответ 1
Очевидно, что оба кода и комментарии используют один и тот же параметр 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
regex еще проще писать. Если вы хотите охватить все возможные ситуации, в том числе угловые, хорошо... Я думаю, лучше всего было бы определить отдельную функцию обнаружения и вызвать ее из :autocmd
вместо match()
.
Ответ 2
Я столкнулся с этой проблемой и считаю, что нашел подходящее решение.
То, что я хотел, чтобы мои комментарии переносились словами, так что, когда я набираю текст, мне не нужно беспокоиться о формировании текста. Это хорошо работает с текстом комментария. Но мне было неудобно иметь формат VIM моего кода. Поэтому я хотел, чтобы vim выделял каждую вещь в красном столбце x.
Чтобы сделать это с помощью только кода cpp, вы должны добавить следующее в файл ~/.vim/ftdetect/cpp.vim.
set textwidth=79
match ErrorMsg '\%>99v.\+'
Примечание. Возможно, вам придется создать файл и папки, если они не существуют.
Если у вас есть проблемы с этим, убедитесь, что у вас установлены форматирование:
formatoptions=croql
Вы можете увидеть это, выполнив: set formatoptions внутри vim.