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

Vim: `set formatoptions` теряется?

У меня set formatoptions=cqn в моем vimrc, но по какой-то причине он не прилипает. Кажется, что в какой-то момент Vim возвращается к умолчанию (fo=tcq)... Но я не могу понять, почему. Выполнение -V100/tmp/log просто дает мне:

formatoptions=tcq
  Last set from ~/.vimrc

Без полезного контекста.

Итак, есть ли способ сделать форматирование? Или мне просто нужно создать autocmd для reset каждый раз при загрузке нового файла?

Edit

Использование :verbose set formatoptions показывает это:

formatoptions=tcq
  Last set from ~/.vimrc

Однако единственная ссылка на fo или formatoptions в моей ~/.vimrc равна set formatoptions+=cqn.

4b9b3361

Ответ 1

В соответствии с документацией vim на formatoptions:

ПРИМЕЧАНИЕ. Этот параметр установлен на Vi значение по умолчанию, когда "совместимо" - set и значение Vim по умолчанию, когда "Совместимый" - reset.

Итак, если значение совместимости меняется на этом пути, это может вызвать проблему, которую вы видите.

Ответ 2

Это поведение происходит из-за плагина C файла в VIM. Поскольку файл загружается после загрузки .vimrc, параметры в .vimrc перезаписываются.
Решение, данное Дэвидом Волевером, кажется лучшим вариантом.
Добавьте следующую строку в .vimrc:

autocmd BufNewFile,BufRead * setlocal formatoptions+=cqn

... вместо обычной команды set formatoptions.

Ответ 3

Я тоже столкнулся с этой проблемой. У меня были специфические для проекта конфигурации, вроде

autocmd BufRead,BufNewFile project/*.c setlocal formatoptions-=cro

Однако set fo? показал formatoptions=croql. Оказывается, мне нужен BufWinEnter вместо BufRead:

После отображения буфера в окне. Эта может быть, когда буфер загружен (после обработка моделей) или когда скрытый буфер отображается в окне (и нет более длинный скрытый). Не происходит: раскол без аргументы, так как вы продолжаете редактировать то же самое буфера или ": split" с файлом, который уже открыть в окне, поскольку он повторно использует существующий буфер. Но это происходит для ": split" с именем текущего буфера, поскольку он перезагружает этот буфер.

Итак, это работает

autocmd BufWinEnter,BufNewFile project/*.c setlocal formatoptions-=cro

Ответ 4

Мне кажется, что какой-то файл, полученный из вашего .vimrc или плагинов, меняет это значение.

Что-то, что можно попытаться определить, это

запустите vim без поиска чего-нибудь, используйте

vim -u NONE

Использование NORC skipps.vimrc, но загружает плагины

Отметьте :help --noplugin, чтобы прочитать о различных параметрах запуска, которые управляют источником.

--noplugin      Skip loading plugins.  Resets the 'loadplugins' option.
                {not in Vi}
                Note that the |-u| argument may also disable loading plugins:
                        argument        load vimrc files        load plugins ~
                        (nothing)               yes                 yes
                        -u NONE                 no                  no
                        -u NORC                 no                  yes
                        --noplugin              yes                 no

Возможно, это также может быть полезно (от help: :set):

When 'verbose' is non-zero, displaying an option value will also tell where it
was last set.  Example: >
        :verbose set shiftwidth cindent?
<         shiftwidth=4 ~
                  Last set from modeline ~
          cindent ~
                  Last set from /usr/local/share/vim/vim60/ftplugin/c.vim ~

возможно...: -)

Edit

Используете ли вы compatible? От help: formatoptions

    NOTE: This option is set to the Vi default value when 'compatible' is
    set and to the Vim default value when 'compatible' is reset.

Ответ 5

Найдено в /usr/share/vim/vim74/ftplugin/vim.vim:

" Set 'formatoptions' to break comment lines but not other lines,<br>
" and insert the comment leader when hitting <CR> or using "o".<br>
setlocal fo-=t fo+=croql

Удалите его. Затем все делается.