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
.
Ответы
Ответ 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
Удалите его. Затем все делается.