Отключение автокомментирования для всех типов файлов
Вопрос
я включил filetype plugin
для некоторых плагинов рельсов vim, которые я добавил, но побочным эффектом этого, похоже, является то, что теперь автокомментирование включено во всех типах файлов (например, если я начинаю строку с #
, следующая строка, либо по Входить в режиме вставки или О, и т. д.для входа в режим вставки также получит #
).
Я нашел гид отключить автокомментирование formatoptions
, и добавил следующее в мой .vimrc:
au FileType * setlocal formatoptions-=cro
Тем не менее, я все еще сталкиваюсь с проблемами - если я явно не :source .vimrc
, (или введите setlocal ...
напрямую), оно не вступает в силу.Я определил, что это так, потому что ftplugins vim переопределяют мои параметры своими собственными.
Затем я нашел второй гид в котором говорится об использовании сценария after ftplugin для внесения изменений после запуска сценариев ftplugin, однако их решение состоит в том, чтобы создать символические ссылки для каждого отдельного типа файла в ~/.vim/after/ftplugin на центральный файл, и это кажется неуклюжим для мне.
Есть ли способ создать общий сценарий after-ftplugin или я неправильно подхожу к этой проблеме?Любая помощь будет оценена по достоинству.
Решение
Как насчет плагина «после»?Создать файл в ~/.vim/after/plugin/
называется noAutoComments.vim
(или что-то еще) и поместите туда свой autocmd?
Редактировать:
Причина, по которой это работает?Я только предполагаю, но у меня такое ощущение, что autocmd
в ~/.vimrc
файл удаляется каким-то другим файлом (но до того, как будут получены файлы «после»).
в итоге я удалил свой ~/.vim
каталог и заменил мой ~/.vimrc
со следующими 3 строками:
filetype plugin on
syntax on
au FileType * setlocal formatoptions-=cro
Имея в себе только эти строки ~/.vimrc
и нет ~/.vim/
каталог, autocmd
кажется, работает так, как ожидалось (Vim 7.1).
Для любого файла, который я редактирую:
:verbose set formatoptions?
formatoptions=ql
Last set from ~/.vimrc
Однако мне еще предстоит определить, какой файл (плагин) вызывает эту проблему.
Другие советы
Я провел еще некоторое расследование и, похоже, местоположение моего autocmd
в моем файле .vimrc определяет, formatoptions
будет переопределен ftplugins vim или нет.С использованием vim --noplugin
чтобы отключить все внешние плагины, я нашел следующие результаты:
Если мой vimrc выглядит так:
au FileType * setl fo-=cro
filetype plugin indent on
Результат :verbose set fo?
является:
formatoptions=croql
Last set from /usr/share/vim/vim72/ftplugin/ruby.vim
Однако, если строки в моем vimrc поменялись местами:
filetype plugin indent on
au FileType * setl fo-=cro
Результат :verbose set fo?
является:
formatoptions=ql
Last set from ~/.vimrc
...что является желаемым результатом.Так что кажется, что autocmd
необходимо указать после включения плагинов типов файлов.
Еще одна причина, по которой это может не вступить в силу...
От :he :set-=
:
When the option is a list of flags, {value} must be exactly as they appear in the option. Remove flags one by one to avoid problems.
У меня есть
" Turn off auto-commenting au FileType * setlocal formatoptions-=c au FileType * setlocal formatoptions-=r au FileType * setlocal formatoptions-=o
потому что я столкнулся с этим.
Используя один из различных autocmd
События для установки параметра конфигурации должны работать, если вы найдете правильный, но я бы начал с запуска:
:verbose set formatoptions?
Это сообщит вам, где была установлена опция, что может облегчить определение того, какой autocmd использовать.В качестве альтернативы, если вы не против небольшого взлома, я бы, вероятно, сделал это просто, чтобы узнать, где это установлено в плагине, и закомментировать эту строку (и записать ее на случай, если вы когда-нибудь обновите плагин).Вы также можете связаться с автором плагина и попросить его сделать его настраиваемым параметром.
Для имеющихся autocmd
события, прочитайте это:
:help {event}
Я пробовал решения, предложенные многими, но ни одно из них мне не помогло, но я нашел один очень простой обходной путь, а именно в вашем ~/.bash_aliases:
# vim without auto comment
alias vi="vi +'set fo-=cro'"
Я боролся с этой проблемой и, наконец, работаю со следующими строками:
syntax on
filetype on
filetype plugin on
au FileType * setlocal formatoptions-=cro
Я думаю, что ключевым моментом здесь является то, что autocmd
это место после filetype plugin on
.