Подтвердить что ты не робот

Vim отличается шириной текста для многострочных комментариев C?

В нашей базе кода на С++ мы сохраняем 99 строк столбцов, но многострочные комментарии 79-нечетных столбцов. Есть ли хорошая стратегия, чтобы сделать это автоматически? Я предполагаю, что режимы уже известны из-за умного комментария, соединяющего строки и ведущей * вставки.

4b9b3361

Ответ 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.