Vim автоматически вставляет комментарий, когда я начинаю новую строку с закомментированной строки, потому что я установил formatoptions=tcroql
. Например (курсор есть *
):
// this is a comment*
и после нажатия <Enter>
(режим вставки) или o
(нормальный режим) я остаюсь с:
// this is a comment
// *
Эта функция очень удобна при написании длинных многострочных комментариев, но часто мне просто нужен однострочный комментарий. Теперь, если я хочу закончить серию комментариев, у меня есть несколько вариантов:
- ударил
<Esc>S
- ударить
<BS>
три раза
Оба из них дают три нажатия клавиш, взятые вместе с <Enter>
этим, означают четыре нажатия клавиш для новой строки, что, я думаю, слишком много. В идеале я хотел бы просто нажать <Enter>
второй раз, чтобы остаться:
// this is a comment
*
Важно, чтобы решение также работало с разными уровнями отступов, т.е.
int main(void) {
// this is a comment*
}
ударил <Enter>
int main(void) {
// this is a comment
// *
}
ударил <Enter>
int main(void) {
// this is a comment
*
}
Я думаю, что видел эту функцию в каком-то текстовом редакторе несколько лет назад, но я не помню, какая это была. Кто-нибудь знает решение, которое сделает это для меня в Vim? Указатели в правильном направлении о том, как развернуть мое собственное решение, также очень приветствуются.
источник
Ответы:
Попробуй это:
источник
:h 'comment'
и:h format-comment'
.#
ruby и"
vimscript в дополнение к классическому//
. На самом деле не имеет смысла что-либо делать для*
многострочных комментариев в стиле C, потому что все равно должно заканчиваться*/
.<CR><CR>
можно использовать для завершения многострочного комментария ...Я расширил ответ @ romainl для работы с произвольными языками, сгенерировав регулярное выражение из Vim
&commentstring
:Тем не менее, я не могу переназначить
<CR>
вообще, это просто не будет работать. Пока пользуюсь<CR><CR>
пока эта проблема не решена.источник
<Esc>S
?<C-u>
делает то же самое, не выходя из режима вставки. В любом случае, у меня была пользовательская функция, которая выполняла кучу вещей<CR>
и переименовала ееSmartEnter()
только вчера, после того как я опубликовала свой ответ ;-). Также я не уверен, что&commentstring
это правильный выбор, так как он обычно содержит только одну форму и может быть «linewise» или «blockwise» (/*%s*/
в C,//%s
в Javascript и т. Д.).Удалить r из 'formatoptions. Это то, что делает этот вариант. Отключение будет означать, что вы никогда не сделаете так, чтобы vim сделал это для вас, а это значит, что вам нужно будет добавить ведущие маркеры комментариев, когда вы действительно их захотите, но это компромисс.
источник
formatoptions