Если вы хотите комментировать на конкретном языке, вам понадобится плагин, например, nerdcommenter .
В качестве альтернативы, хотя он не отвечает на ваш реальный вопрос, вы можете использовать встроенные действия vim и свое знание символов комментария каждого языка ...
Вариант № 1: V-блоки
:1
Enter (Перейти к строке 1)
- Ctrl-V (режим V-Block)
jjj
(Вниз еще 3 строки)
- Shift-I (войти в режим вставки перед блоком)
#
(Вставьте «#»)
- Esc (Вернуться в нормальный режим)
Вариант № 2: Замена
:1,4s/^/#/
Сломать:
:
Экс команда следует
1,4
по строкам с 1 по 4
s
замена
/
разделитель для частей команды замещения.
(Вы также можете использовать другой символ, например :
)
^
начало строки
/
разделитель
#
символ комментария для python
/
последний разделитель
Вариант № 3: Повторить применение макроса ( источник )
:1
Enter (Перейти к строке 1)
qa
(Начать запись в реестре a
)
- Shift-I (войти в режим вставки в начале строки
#
(Добавьте «#» в начале строки)
- Esc (Вернуться в нормальный режим)
q
(Остановить запись)
:2,4 normal @a
(повторно запустите записанный макрос для регистрации a
в строках между 2 и 4)
ИЛИ
Вы можете выбрать линии в визуальном режиме и нажать, :
чтобы автоматически заполнить строку Ex :'<,'>
(диапазон от начала до конца визуального выделения), затем набрать normal @a
и нажать Enter( источник ).
Теперь, когда вы хотите прокомментировать некоторые строки, просто перезапустите записанный макрос для регистрации a
в этих строках:
:9,22 normal @a (comment out lines 9-22)
:9,22 normal I#
согласно моему ответу.normal
команде до написания этого ответа. Вы правы;:9,22 normal I#
будет работать так же.Используя режим Visual Block ( CtrlV), выберите начало строк. Затем нажмите I#(это заглавная буква
I
), чтобы вставить символ хеша в каждую из этих строк. Затем нажмите Escдля возврата из режима вставки в обычный режим.источник
ctrl
? Потомуctrl+v
что это нечто отличное от всегоv
.I
. Когда я нажимаюI
, то#
будет помещен только перед первой строкой.Esc
после описанной процедуры.Esc
в конце нужно нажать .Если вам просто нужно быстрое решение для любого языка, на котором вы сейчас находитесь, и текст уже выделен в визуальном режиме, то
делает работу (Для каждой строки в обычном режиме перейдите к первому столбцу и вставьте
#
. Использование:norm I#
будет вставлять его перед первым непробельным символом, что может быть не тем, что вы хотите.) Использование:norm i#
также будет работать, потому что:norm
начинается в начале линия, но она менее четкая и менее понятная, если вы этого не знаете.Конечно, если вы собираетесь делать это часто, вы захотите настроить отображение или искать плагин.
источник
normal
команда выполняется с курсором в начале строки.Чтобы сделать это автоматически, вам потребуется добавить что-то вроде следующего в ваш
vimrc
файл ( источник ):Используется ,cдля комментирования региона и ,uраскомментирования региона. Это вручную устанавливает символы комментария для разных языков.
Второй вариант - использовать такой плагин, как tcomment , vim-commentary или comments.vim . Я сам пользуюсь tcomment. Пожалуйста, прочитайте инструкции по использованию и установке на их страницах, так как я считаю, что это выходит за рамки вопроса.
Я бы посоветовал вам использовать плагин (один из приведенных выше или другой), так как это гораздо проще, чем поддерживать фрагмент кода в вашем
vimrc
файле.Изменить: я удалил ручной путь, как вопрос был изменен, а также правильный ответ 200_success.
источник
//
(только/* */
).:s
команд, показанных в выдержке из ответа. Сам чек будет что-то вродеgetline('.') =~ "^" . escape(b:comment_leader, '\/')
. Если это правда, раскомментируйте, иначе прокомментируйте. Это не проверено и должно служить только примером.Я использую scrooloose / nerdcommenter для этого.
С помощью этого плагина вы можете визуально выбирать ваши строки и нажимать leader+, cчтобы переключать комментарии. В зависимости от типа файла для комментирования будут использоваться разные символы.
источник
После того, как вы выбрали строки, просто введите
:
автоматически добавит'<,'>
в вашу командную строку, которая находится в диапазоне от начала вашего выбора до конца;norm
выполняет команду нормального режима и будет действовать в этом диапазоне;I#
является командой нормального режима, которая вставляет «#» в начале строки.источник
Я большой поклонник TComment для этого; я могу не только создавать стили комментариев для конкретных типов файлов, но даже указывать блок против строки для языков, которые поддерживают комментарии блоков.
источник
Я нахожу плагин vim-комментария , безусловно, самый простой способ сделать это. Выберите диапазон линий, затем просто нажмите gc. Он будет использовать соответствующий символ комментария для открытого вами типа файла. Даже без визуального выбора можно раскомментировать соседние закомментированные строки с помощью gcuили gcgc.
источник
Предполагая, что вы хотите добавить префикс к 5 строкам в начале строки, вы можете использовать Поиск и замену. :
или в конце строк:
Или используйте визуальный режим ( Ctrl+v ), чтобы выбрать вертикальный блок текста, затем войдите в режим вставки ( I), введите что-нибудь и нажмите, Escчтобы подтвердить и применить изменения к другим строкам.
Связанный:
источник
Этот ответ здесь 1) показать правильный код, чтобы вставить в,
.vimrc
чтобы получитьvim 7.4+
возможность комментировать / раскомментировать блок, сохраняя уровень отступа с 1 ярлыком в визуальном режиме и 2), чтобы объяснить это.Вот код:
Как это работает:
let b:commentChar='//'
: Это создает переменную в vim.b
здесь относится к области, которая в данном случае содержится в буфер, то есть открытый в данный момент файл. Ваши символы комментариев являются строками и должны быть заключены в кавычки, кавычки не являются частью того, что будет подставлено при переключении комментариев.autocmd BufNewFile,BufReadPost *...
: Автокоманды запускаются для разных вещей, в этом случае они запускаются, когда новый файл или прочитанный файл заканчивается с определенным расширением. После запуска выполните следующую команду, которая позволяет нам изменитьcommentChar
зависимости зависимости от типа файла. Есть и другие способы сделать это, но они больше сбивают с толку новичков (таких как я).function! Docomment()
: Функции объявляются, начиная сfunction
и заканчиваяendfunction
. Функции должны начинаться с заглавной буквы. что!
гарантирует , что эта функция переопределяет все предыдущие функции , определенные какDocomment()
с этой версиейDocomment()
. Без этого у!
меня были ошибки, но это могло быть потому, что я определял новые функции через командную строку vim.execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e'
: Выполнить вызывает команду. В этом случае мы выполняемsubstitute
, который может принимать диапазон (по умолчанию это текущая строка), например,%
для всего буфера или'<,'>
для выделенного раздела.^\s*
является регулярным выражением, чтобы соответствовать началу строки, за которой следует любое количество пробелов, которые затем добавляются (из-за&
)..
Здесь используется для конкатенации, так какescape()
не может быть завернуты в кавычки.escape()
позволяет вам экранировать символ,commentChar
который соответствует аргументам (в данном случае\
и/
), добавляя их с помощью\
. После этого мы снова соединяем конец нашейsubstitute
строки, который имеетe
флаг. Этот флаг позволяет нам молча потерпеть неудачу, что означает, что если мы не найдем совпадения в данной строке, мы не будем кричать об этом. В целом, эта строка позволяет поставить символ комментария, за которым следует пробел перед первым текстом, что означает, что мы сохраняем наш уровень отступа.execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e'
Это похоже на нашу последнюю огромную длинную команду. У нас есть уникальная возможность\v
, которая гарантирует, что нам не нужно избегать наших()
, и1
которая относится к группе, которую мы создали с нашей()
. По сути, мы сопоставляем строку, начинающуюся с любого количества пробелов, а затем наш символ комментария, за которым следует любое количество пробелов, и мы сохраняем только первый набор пробелов. Опять же,e
давайте молча потерпим неудачу, если у нас нет символа комментария в этой строке.let l:line=getpos("'<")[1]
: это устанавливает переменную так же, как мы сделали с нашим символом комментария, ноl
ссылается на локальную область видимости (локальную для этой функции).getpos()
получает позицию, в данном случае, начала нашего выделения, и[1]
означает, что мы заботимся только о номере строки, а не о других вещах, таких как номер столбца.if match(getline(l:line), '^\s*'.b:commentChar)>-1
Знаете, какif
работает.match()
проверяет, содержит ли первая вещь вторую, поэтому мы берем строку, с которой мы начали выделение, и проверяем, начинается ли она с пробела, за которым следует символ комментария.match()
возвращает индекс, где это правда, и-1
если совпадений не найдено. Так какif
все ненулевые числа оцениваются как истинные, мы должны сравнить наш вывод, чтобы увидеть, больше ли он -1. Сравнение вvim
возвращает 0, если ложь, и 1, если истина, что иif
нужно видеть, чтобы оценить правильно.vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>
:vnoremap
означает отображать следующую команду в визуальном режиме, но не отображать ее рекурсивно (то есть не изменять никакие другие команды, которые могут использоваться другими способами). По сути, если вы новичок Vim, всегда используйте,noremap
чтобы убедиться, что вы не сломать вещи.<silent>
означает «Я не хочу ваших слов, только ваши действия» и говорит, что ничего не печатать в командной строке.<C-r>
это то, что мы отображаем, в данном случае это ctrl + r (обратите внимание, что вы все равно можете использовать Cr обычно для «повторения» в обычном режиме с этим отображением).C-u
это немного сбивает с толку, но в основном это гарантирует, что вы не потеряете свою визуальную подсветку (в соответствии с этим ответом ваша команда начинает с'<,'>
чего мы и хотим).call
здесь просто говорит vim выполнить функцию, которую мы назвали, и<cr>
ссылается на нажатиеenter
кнопка. Мы должны нажать ее один раз, чтобы фактически вызвать функцию (в противном случае мы просто набрали ееcall function()
в командной строке, и нам нужно нажать ее снова, чтобы наши заменители прошли весь путь (не совсем понятно, почему, но что угодно).В любом случае, надеюсь, это поможет. Это будет принимать что - либо подсвечены
v
,V
илиC-v
, проверить , если первая строка комментариев, если да, попробуйте раскомментировать все выделенные строки, а если нет, добавить дополнительный слой символы комментария к каждой строке. Это мое желаемое поведение; Я не просто хотел, чтобы он переключался независимо от того, была ли прокомментирована каждая строка в блоке или нет, поэтому он отлично работает после того, как я задал несколько вопросов на эту тему.источник