Как я могу заставить vim перестать размещать комментарии перед новыми строками?

50

Я редактирую свой .vimrcфайл, и я включаю комментарии. Когда у меня есть комментарий, как это:

" example comment

И затем нажмите ввод в конце строки после завершения комментария, следующая строка автоматически устанавливается как комментарий (кавычки автоматически вставляются):

" example comment
" 

Как я могу остановить это поведение?

Greg
источник

Ответы:

66

Это контролируется formatoptionsнастройкой; от :help fo-table:

Вы можете использовать эту 'formatoptions'опцию, чтобы повлиять на форматирование текста в Vim. 'formatoptions'это строка, которая может содержать любую из букв ниже. По умолчанию установлено tcq. Вы можете разделить буквы опции запятыми для удобства чтения.

Обратите внимание, что утверждение о «значениях по умолчанию» несколько вводит в заблуждение, так как многие типы файлов изменяют форматирование в соответствии с типом файла; например в /usr/share/vim/vim74/ftplugin/vim.vim:

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

Вы можете просмотреть текущий formatoptionsс:

:set fo?
  formatoptions=jcroql

И посмотри, где они были установлены так:

:verbose set fo?
  formatoptions=jcroql
      Last set from /usr/share/vim/vim74/ftplugin/vim.vim

В этом случае вы хотите удалить rфлаг, но, возможно, также cи oфлаги:

r       Automatically insert the current comment leader after hitting
        <Enter> in Insert mode.
c       Auto-wrap comments using textwidth, inserting the current comment
        leader automatically.
o       Automatically insert the current comment leader after hitting 'o' or
        'O' in Normal mode.

Это можно сделать так:

:set formatoptions-=r formatoptions-=c formatoptions-=o

Обратите внимание, что использование :set formatoptions-=croне будет работать должным образом (так как это строка, она будет искать строку croв том порядке, который часто не будет работать.).

Чтобы установить изменения только для текущего буфера, используйте :setlocalвместо :set. Если вы хотите всегда иметь эти параметры, вероятно, лучше использовать autocmdв вашем vimrc; например:

au FileType vim setlocal fo-=c fo-=r fo-=o

Это установит параметры только для типа файла 'vim' и не будет мешать другим типам файлов.

Если вы хотите всегда устанавливать его, используйте:

au FileType * set fo-=c fo-=r fo-=o

Просто использование set fo-=croне будет работать, так как многие типы файлов установлены / расширены formatoption(как показано выше); FileType autocmd выполняется после загрузки файлов типов файлов.

Мартин Турной
источник
1
Подтверждено. Кроме того, ответ здесь: stackoverflow.com/questions/16030639/vim-formatoptions-or
Дыня
1
Добавление au FileType * set fo-=oв мой .vimrc не сработало. Я нажимаю oв комментируемой строке, и это все еще комментирует это также.
Ixx
Это беспокоило меня долгое время. По умолчанию formatoptionsбыли упакованы мой текстовый файл. Я ломал голову вокруг textwidthи , wrapmarginно ничего не получалось. Даже понизил мой vim с 8.1 до 8.0, думая, что это ошибка. Это решило мою проблему, спасибо.
Anishjp
2

Добавьте это в ваш vimrc:

au BufEnter * set fo-=c fo-=r fo-=o

Использование FileTypeне будет работать, так как другие плагины установлены formatoption.

аура
источник
Кажется, это единственное решение для меня, даже когда я отключаю все плагины в Vundle. Используя неовим. Есть идеи, почему это может быть?
Андрей Газелька