`fold-create-marker` со значением по умолчанию` {{{`marker не работает должным образом, когда определение функции содержит` * ` - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть эта настройка в vim

foldmarker={{{,}}}
commentstring=/*%s*/
foldmethod=marker

Я хочу создать новый маркер, используя zf, который работает для

void foo(void bar) {
}

, когда я выбрал это и нажал zf Я получаю

void foo(void bar) {/*{{{*/
}/*}}}*/

пока все хорошо.Однако, когда определение функции содержит указатель, как в

void foo(void * bar) {
}

, я получаю

void foo(void * bar) {{{{
}/*}}}*/

, что неправильно.Как я могу настроить vim для правильной работы даже во втором случае?

1 Ответ

0 голосов
/ 11 декабря 2018

Это странное поведение вызвано значением по умолчанию опции :help 'comments', в частности детали mb:*.

:help format-comments поясняет

  To avoid recognizing "*ptr" as a comment, the middle string includes the 'b' flag.

К сожалению, способ, которым вы пишете указатель (через пробел после *), побеждает эту эвристику, и Vim обнаруживает * как среднюю часть трехэлементного кода.частичный комментарий (Vim не проверяет, есть ли перед ним начальная часть), предполагает, что начало сгиба уже является частью комментария, и поэтому пропускает добавление туда 'commentstring'.

Чтобы это исправить, либоизмените свой стиль кодирования (напишите void *bar) или измените параметр 'comments', например, удалив (или уточнив, если вы его используете) среднюю часть:

setlocal comments-=mb:*

Если вам нужно удерживать серединукуски и правильных ручных сгибов, вам нужно написать небольшое отображение обертки вокруг zf, которое временно изменяет параметр.

...