Як я можу отримати вим, щоб перестати коментарі перед новими рядками?


50

Я редагую свій .vimrcфайл, і я включаю коментарі. Коли у мене є такий коментар:

" example comment

А потім натисніть клавішу Enter у кінці рядка після завершення коментаря, наступний рядок автоматично встановлюється як коментар (цитати автоматично вставляються):

" example comment
" 

Як я можу припинити таку поведінку?

Відповіді:


66

Це контролюється за допомогою formatoptionsнастройки; від :help fo-table:

Ви можете використовувати 'formatoptions'опцію, щоб впливати на формат тексту Vim. 'formatoptions'- це рядок, який може містити будь-яку з літер нижче. Типовим налаштуванням є tcq. Ви можете розділити літери з комами з комами для читабельності.

Зауважте, що твердження про "за замовчуванням" дещо вводить в оману, оскільки багато файлів змінюють формати, щоб найкраще відповідати типу файлу; наприклад у /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

Ви можете переглянути струм за formatoptionsдопомогою:

:set fo?
  formatoptions=jcroql

І подивіться, де їх так встановили:

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

У цьому випадку потрібно видалити rпрапор, але, можливо, також cі 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.

Це можна зробити так:

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

Зауважте, що використання :set formatoptions-=croне буде працювати, як очікувалося (оскільки це рядок, воно буде шукати рядок croу тому порядку, який часто не працює.)

Щоб встановити зміни лише для поточного буфера, використовуйте :setlocalзамість :set. Якщо ви хочете завжди мати ці параметри, можливо, найкраще використовувати autocmdу своєму vimrc; наприклад:

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

Це встановить параметри лише для файлу 'vim', і не заважатиме іншим типам файлів.

Якщо ви хочете завжди його встановлювати, використовуйте:

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

Просто використання set fo-=croне працюватиме, оскільки багато файлів встановлюють / розширюють formatoption(як показано вище); autoTM FileType виконується після завантаження файлів файлів.


1
Підтверджено. Також на нього тут відповіли: stackoverflow.com/questions/16030639/vim-formatoptions-or
Диня

1
Додавання au FileType * set fo-=oдо мого .vimrc не працювало. Я натискаю oв коментованому рядку, і він все ще коментує це.
Ixx

Це мене давно клопоче. За замовчуванням formatoptionsзагортали мій файл txt. Я ламав голову навколо textwidthі , wrapmarginале нічого не виходило. Навіть зменшив рівень vim з 8,1 до 8,0, думаючи, що це помилка. Це вирішило моє питання, дякую.
anishjp

2

Додайте це у свій vimrc:

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

Використання FileTypeне працюватиме, оскільки встановлені інші плагіни formatoption.


Це здається для мене єдиним рішенням, навіть коли я відключаю всі плагіни в Vundle. Використання неовіму. Будь-яка ідея, чому це може бути?
Андрій Газелка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.