Bagaimana saya bisa mendapatkan vim untuk berhenti menempatkan komentar di depan baris baru?

50

Saya mengedit .vimrcfile saya , dan saya termasuk komentar. Ketika saya memiliki komentar seperti ini:

" example comment

Dan kemudian tekan enter pada akhir baris setelah menyelesaikan komentar, baris berikutnya secara otomatis diatur sebagai komentar (tanda kutip secara otomatis dimasukkan):

" example comment
" 

Bagaimana saya bisa menghentikan perilaku ini?

Greg
sumber

Jawaban:

66

Ini dikendalikan dengan formatoptionspengaturan; dari :help fo-table:

Anda dapat menggunakan 'formatoptions'opsi untuk memengaruhi cara Vim memformat teks. 'formatoptions'adalah string yang dapat berisi salah satu huruf di bawah ini. Pengaturan default adalah tcq. Anda dapat memisahkan surat opsi dengan koma untuk dibaca.

Perhatikan bahwa pernyataan tentang "default" agak menyesatkan, karena banyak tipe file mengubah pilihan format yang paling sesuai dengan jenis file; misalnya di /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

Anda dapat melihat saat ini formatoptionsdengan:

:set fo?
  formatoptions=jcroql

Dan lihat di mana mereka diatur seperti ini:

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

Dalam hal ini, Anda ingin menghapus rbendera, tetapi mungkin juga bendera cdan 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.

Ini bisa dilakukan seperti ini:

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

Perhatikan bahwa menggunakan :set formatoptions-=crotidak akan berfungsi seperti yang diharapkan (karena ini adalah string, itu akan mencari string cro, dalam urutan itu, yang sering kali tidak akan berfungsi.).

Untuk mengatur perubahan hanya untuk buffer saat ini, gunakan :setlocalsebagai ganti :set. Jika Anda ingin selalu memiliki opsi ini, mungkin yang terbaik adalah menggunakan autocmdvimrc Anda; sebagai contoh:

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

Ini akan mengatur opsi hanya untuk tipe file 'vim', dan tidak akan mengganggu tipe file lainnya.

Jika Anda ingin selalu mengaturnya, gunakan:

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

Hanya menggunakan set fo-=crotidak akan berfungsi karena banyak tipe file yang ditetapkan / diperluas formatoption(seperti yang ditunjukkan di atas); autocmd FileType dijalankan setelah file tipe file dimuat.

Martin Tournoij
sumber
1
Dikonfirmasi Juga, ini dijawab di sini: stackoverflow.com/questions/16030639/vim-formatoptions-or
Melon
1
Menambahkan au FileType * set fo-=oke .vimrc saya tidak berfungsi. Saya menekan odi baris komentar dan masih berkomentar juga.
Ixx
Ini telah menggangguku sejak lama. Default formatoptionssedang membungkus file txt saya. Saya mematahkan kepala textwidthdan wrapmargintetapi tidak ada yang berhasil. Bahkan menurunkan vim saya dari 8.1 ke 8.0 berpikir bahwa itu adalah bug. Ini menyelesaikan masalah saya, terima kasih.
anishjp
2

Tambahkan ini di vimrc Anda:

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

Penggunaan FileTypetidak akan berfungsi sejak plugin lain disetel formatoption.

Aura
sumber
Ini tampaknya menjadi satu-satunya solusi bagi saya bahkan ketika saya menonaktifkan semua plugin di Vundle. Menggunakan neovim. Adakah yang tahu mengapa ini terjadi?
Andrew Gazelka