Come posso ottenere VIM per smettere di mettere commenti davanti a nuove righe?


50

Sto modificando il mio .vimrcfile e includo commenti. Quando ho un commento come questo:

" example comment

E poi premi invio alla fine della riga dopo aver terminato il commento, la riga successiva viene automaticamente impostata come commento (le virgolette vengono inserite automaticamente):

" example comment
" 

Come posso fermare questo comportamento?

Risposte:


66

Questo è controllato con l' formatoptionsimpostazione; da :help fo-table:

Puoi usare l' 'formatoptions'opzione per influenzare il modo in cui Vim formatta il testo. 'formatoptions'è una stringa che può contenere una delle lettere seguenti. L'impostazione predefinita è tcq. È possibile separare le lettere delle opzioni con virgole per la leggibilità.

Si noti che l'affermazione sui "valori predefiniti" è in qualche modo fuorviante, dal momento che molti tipi di file modificano i formati per adattarli meglio al tipo di file; ad esempio in /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

Puoi visualizzare la corrente formatoptionscon:

:set fo?
  formatoptions=jcroql

E vedi dove sono stati impostati in questo modo:

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

In questo caso, vuoi rimuovere il rflag, ma forse anche i flag 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.

Questo può essere fatto in questo modo:

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

Si noti che l'utilizzo :set formatoptions-=cronon funzionerà come previsto (poiché è una stringa, cercherà la stringa cro, in quell'ordine, che spesso non funzionerà).

Per impostare le modifiche solo per il buffer corrente, utilizzare :setlocalinvece di :set. Se vuoi avere sempre queste opzioni, probabilmente è meglio usare un autocmdnel tuo vimrc; per esempio:

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

Questo imposterà le opzioni solo per il tipo di file 'vim' e non interferirà con altri tipi di file.

Se vuoi impostarlo sempre , usa:

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

Il solo utilizzo set fo-=cronon funziona poiché molti tipi di file vengono impostati / espansi formatoption(come mostrato sopra); il FileType autocmd viene eseguito dopo il caricamento dei file filetype.


1
Confermato. Inoltre, qui si risponde: stackoverflow.com/questions/16030639/vim-formatoptions-or
Melon,

1
L'aggiunta au FileType * set fo-=oal mio .vimrc non ha funzionato. Premo ouna riga commentata e continua a commentarla.
Ixx

Questo mi infastidisce da molto tempo. L'impostazione predefinita formatoptionsincludeva il mio file txt. Mi stavo rompendo la testa textwidthe wrapmarginma niente ha funzionato. Ho anche declassato il mio vim da 8.1 a 8.0 pensando che fosse un bug. Questo ha risolto il mio problema, grazie.
anishjp,

2

Aggiungi questo nel tuo vimrc:

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

L'uso FileTypenon funzionerà poiché sono stati impostati altri plugin formatoption.


Questa sembra essere l'unica soluzione per me anche quando disabilito tutti i plugin in Vundle. Usando Neovim. Qualche idea sul perché questo potrebbe essere?
Andrew Gazelka,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.