Очевидно, что и код, и комментарии используют одну и ту же опцию 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()
.