Làm thế nào tôi có thể nhận được vim để ngừng bình luận trước dòng mới?


50

Tôi đang chỉnh sửa .vimrctệp của mình và tôi đang bao gồm các bình luận. Khi tôi có một bình luận như thế này:

" example comment

Và sau đó nhấn enter ở cuối dòng sau khi kết thúc nhận xét, dòng tiếp theo sẽ tự động được thiết lập dưới dạng một nhận xét (dấu ngoặc kép được tự động chèn):

" example comment
" 

Làm thế nào tôi có thể ngăn chặn hành vi này?

Câu trả lời:


66

Điều này được kiểm soát với các formatoptionsthiết lập; từ :help fo-table:

Bạn có thể sử dụng 'formatoptions'tùy chọn để ảnh hưởng đến cách định dạng văn bản Vim. 'formatoptions'là một chuỗi có thể chứa bất kỳ chữ cái nào dưới đây. Cài đặt mặc định là tcq. Bạn có thể tách các chữ cái tùy chọn bằng dấu phẩy để dễ đọc.

Lưu ý rằng tuyên bố về "mặc định" là hơi sai lệch, vì nhiều kiểu tệp thay đổi định dạng để phù hợp nhất với loại tệp; ví dụ trong /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

Bạn có thể xem hiện tại formatoptionsvới:

:set fo?
  formatoptions=jcroql

Và xem nơi chúng được đặt như vậy:

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

Trong trường hợp này, bạn muốn xóa rcờ, nhưng có lẽ cả cờ cocờ:

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.

Điều này có thể được thực hiện như vậy:

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

Lưu ý rằng việc sử dụng :set formatoptions-=crosẽ không hoạt động như mong đợi (vì đó là một chuỗi, nó sẽ tìm chuỗi cro, theo thứ tự đó, thường không hoạt động.).

Để chỉ thay đổi cho bộ đệm hiện tại, hãy sử dụng :setlocalthay vì :set. Nếu bạn muốn luôn có các tùy chọn này, có lẽ tốt nhất là sử dụng một autocmdtrong vimrc của bạn; ví dụ:

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

Điều này sẽ thiết lập các tùy chọn chỉ cho 'vim' filetype, và sẽ không can thiệp với các loại tệp khác.

Nếu bạn muốn luôn đặt nó, hãy sử dụng:

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

Chỉ sử dụng set fo-=crosẽ không hoạt động vì nhiều kiểu tệp được đặt / mở rộng formatoption(như được hiển thị ở trên); autocmd FileType được thực thi sau khi các tệp filetype đã được tải.


1
Đã xác nhận. Ngoài ra, nó đã được trả lời ở đây: stackoverflow.com/questions/16030639/vim-formatoptions-or
Melon

1
Thêm au FileType * set fo-=ovào .vimrc của tôi không hoạt động. Tôi nhấn ovào một dòng bình luận và nó vẫn bình luận nó.
Ixx

Điều này đã được tôi làm phiền trong một thời gian dài. Mặc định formatoptionsđã gói tập tin txt của tôi. Tôi đã phá vỡ đầu của tôi textwidthwrapmarginkhông có gì làm việc. Thậm chí đã hạ cấp vim của tôi từ 8.1 xuống 8.0 vì nghĩ rằng đó là một lỗi. Điều này đã giải quyết vấn đề của tôi, cảm ơn.
anishjp

2

Thêm phần này vào vimrc của bạn:

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

Sử dụng FileTypesẽ không hoạt động kể từ khi các plugin khác được thiết lập formatoption.


Đây dường như là giải pháp duy nhất cho tôi ngay cả khi tôi vô hiệu hóa tất cả các plugin trong Vundle. Sử dụng neovim. Bất cứ ý tưởng tại sao điều này có thể được?
Andrew Gazelka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.