Jak mogę uzyskać vima, aby przestał komentować nowe wiersze?

50

Edytuję .vimrcplik i dołączam komentarze. Kiedy mam taki komentarz:

" example comment

A następnie naciśnij Enter na końcu wiersza po zakończeniu komentarza, następny wiersz jest automatycznie ustawiany jako komentarz (cytaty są automatycznie wstawiane):

" example comment
" 

Jak mogę zatrzymać to zachowanie?

Greg
źródło

Odpowiedzi:

66

Jest to kontrolowane za pomocą formatoptionsustawienia; z :help fo-table:

Możesz użyć tej 'formatoptions'opcji, aby wpłynąć na sposób formatowania tekstu przez Vima. 'formatoptions'to ciąg znaków, który może zawierać dowolną z poniższych liter. Ustawienie domyślne to tcq. Możesz oddzielić litery opcji przecinkami, aby zwiększyć ich czytelność.

Zauważ, że stwierdzenie o „domyślnych” jest nieco mylące, ponieważ wiele rodzajów plików zmienia opcje formatów, aby najlepiej pasowały do ​​typu pliku; na przykład w /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

Możesz zobaczyć bieżący za formatoptionspomocą:

:set fo?
  formatoptions=jcroql

I zobacz, gdzie zostały ustawione w ten sposób:

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

W takim przypadku chcesz usunąć rflagę, ale być może także flagi ci 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.

Można to zrobić w następujący sposób:

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

Zauważ, że użycie :set formatoptions-=cronie będzie działać zgodnie z oczekiwaniami (ponieważ jest to ciąg, będzie szukał łańcucha crow takiej kolejności, która często nie będzie działać).

Aby ustawić zmiany tylko dla bieżącego bufora, użyj :setlocalzamiast :set. Jeśli chcesz zawsze mieć te opcje, prawdopodobnie najlepiej jest użyć autocmdw swoim vimrc; na przykład:

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

Spowoduje to ustawienie opcji tylko dla typu pliku „vim” i nie będzie kolidować z innymi typami plików.

Jeśli chcesz zawsze to ustawiać, użyj:

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

Samo używanie set fo-=cronie działa, ponieważ wiele typów plików ustawia / rozwija formatoption(jak pokazano powyżej); autocmd FileType jest wykonywany po załadowaniu plików typu pliku.

Martin Tournoij
źródło
1
Zatwardziały. Tutaj również znajduje się odpowiedź: stackoverflow.com/questions/16030639/vim-formatoptions-or
Melon
1
Dodawanie au FileType * set fo-=odo mojego .vimrc nie działa. Naciskam oskomentowany wiersz, który wciąż go komentuje.
Ixx
To mnie denerwuje od dłuższego czasu. Domyślnie formatoptionspakowałem mój plik txt. I łamał głowę dookoła textwidthi wrapmarginale nic nie działało. Nawet obniżyłem mój vim z 8.1 do 8.0, myśląc, że to błąd. To rozwiązało mój problem, dzięki.
anishjp
1

Dodaj to w swoim vimrc:

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

Korzystanie FileTypenie działa, ponieważ ustawione są inne wtyczki formatoption.

Aura
źródło