Como faço para que o vim pare de colocar comentários na frente de novas linhas?

50

Estou editando meu .vimrcarquivo e incluindo comentários. Quando tenho um comentário como este:

" example comment

E, em seguida, pressione enter no final da linha após terminar o comentário, a próxima linha é configurada automaticamente como um comentário (as aspas são inseridas automaticamente):

" example comment
" 

Como posso parar esse comportamento?

Greg
fonte

Respostas:

66

Isso é controlado com a formatoptionsconfiguração; de :help fo-table:

Você pode usar a 'formatoptions'opção para influenciar como o Vim formata o texto. 'formatoptions'é uma sequência que pode conter qualquer uma das letras abaixo. A configuração padrão é tcq. Você pode separar as letras das opções com vírgulas para facilitar a leitura.

Observe que a declaração sobre os "padrões" é um pouco enganadora, pois muitos tipos de arquivos alteram as formações para melhor se adequarem ao tipo de arquivo; por exemplo em /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

Você pode ver a corrente formatoptionscom:

:set fo?
  formatoptions=jcroql

E veja onde eles foram configurados assim:

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

Nesse caso, você deseja remover a rbandeira, mas talvez também as bandeiras ce 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.

Isso pode ser feito da seguinte maneira:

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

Observe que o uso :set formatoptions-=cronão funcionará conforme o esperado (já que é uma sequência, ela procurará a sequência cro, nessa ordem, que geralmente não funcionará.).

Para definir as alterações apenas para o buffer atual, use em :setlocalvez de :set. Se você quiser sempre ter essas opções, provavelmente é melhor usar um autocmdno seu vimrc; por exemplo:

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

Isso definirá as opções apenas para o tipo de arquivo 'vim' e não interferirá com outros tipos de arquivo.

Se você deseja defini-lo sempre , use:

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

Apenas o uso set fo-=cronão funcionará, pois muitos tipos de arquivos são definidos / expandidos formatoption(como mostrado acima); o FileType autocmd é executado após o carregamento dos arquivos do tipo de arquivo.

Martin Tournoij
fonte
11
Confirmado. Além disso, ele é respondido aqui: stackoverflow.com/questions/16030639/vim-formatoptions-or
Melon
11
Adicionar au FileType * set fo-=oao meu .vimrc não funcionou. Pressiono ouma linha comentada e ela também comenta.
Ixx
Isso me incomoda há muito tempo. O padrão formatoptionsestava quebrando meu arquivo txt. Eu estava quebrando a cabeça textwidthe wrapmarginnada funcionou. Até rebaixei meu vim de 8.1 para 8.0, pensando que é um bug. Isso resolveu meu problema, obrigado.
anishjp 10/07
2

Adicione isso no seu vimrc:

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

O uso FileTypenão funcionará desde que outros plugins sejam definidos formatoption.

Aura
fonte
Essa parece ser a única solução para mim, mesmo quando desabilito todos os plugins no Vundle. Usando neovim. Alguma idéia de por que isso pode ser?
Andrew Gazelka 04/11