Как вставить текст в начале многострочного выделения в vi/Vim?
В Vim, как бы я вставил символы в начале каждой строки в выделении?
Например, допустим, я хочу закомментировать блок кода, добавляя //
в начале каждой строки (при условии, что моя система языковых комментариев не допускает комментирование блоков, как /* */
). Как бы я это сделал?
Ответы
Ответ 1
- Нажмите Esc, чтобы войти в "командный режим"
- Используйте Ctrl + V для входа в режим визуального блока.
- Переместите Up/Down, чтобы выбрать столбцы текста в строках, которые вы хотите прокомментировать.
- Затем нажмите Shift + i и введите текст, который вы хотите вставить.
- Затем нажмите Esc, подождите 1 секунду, и вставленный текст появится в каждой строке.
Для получения дополнительной информации и чтения, ознакомьтесь с этой статьей на вики-сайте vim.
Ответ 2
Это заменяет начало каждой строки на "//":
:%s!^!//!
Это заменяет начало каждой выбранной строки (используйте визуальный режим для выбора) с помощью "//":
:'<,'>s!^!//!
Примечание, что gv
(в нормальном режиме) восстанавливает последний визуальный выбор, это время от времени подходит.
Ответ 3
Общий шаблон для поиска и замены:
:s/search/replace/
Заменяет первое вхождение "поиска" на "replace" для текущей строки
:s/search/replace/g
Заменяет все вхождения "поиска" на "replace" для текущей строки, "g" является сокращением для "global"
Эта команда заменит каждое вхождение "поиска" на "заменить" только для текущей строки. % Используется для поиска по всему файлу. Чтобы подтвердить каждую замену в интерактивном режиме, добавьте "c" для подтверждения:
:%s/search/replace/c
Интерактивный подтверждение заменяет "поиск" на "заменить" для всего файла
Вместо символа% вы можете использовать диапазон номеров строк (обратите внимание, что символ "^" является специальным символом поиска для начала строки):
:14,20s/^/#/
Вставляет символ '#' в начале строк 14-20
Если вы хотите использовать другой символ комментария (например,//), измените свой разделитель команд:
:14,20s!^!//!
Вставляет последовательность символов "//" в начале строк 14-20
Или вы всегда можете просто скрыть символы //, например:
:14,20s/^/\/\//
Вставляет последовательность символов "//" в начале строк 14-20
Если вы не видите номера строк в своем редакторе, просто введите следующий
:set nu
Ответ 4
Другой способ, который может быть проще для новичков:
some█
code
here
Поместите курсор в первую строку, например. по
: 1 Enter
и введите следующее для перехода в режим вставки и добавьте текст:
I / / Space
// █some
code
here
Нажмите Esc, чтобы вернуться в командный режим и используйте орграф:
j . j .
// some
// code
//█here
j - это команда движения для перехода по одной линии, а . повторяет последнюю команду редактирования.
Ответ 5
И еще один способ:
- Переход к началу строки
- введите режим Visual Block (CTRL - v)
- выберите нужные строки (перемещение вверх/вниз с помощью j/k или переход к строке с помощью [line] G)
- нажмите I (это капитал i)
- введите символ комментария
- нажмите ESC
Ответ 6
Это добавляет #
в начале каждой строки:
:%s/^/#/
И люди перестанут жаловаться на отсутствие должным образом комментирующих скриптов.
Ответ 7
Если вы хотите получить супер-фантазию об этом, поместите это в свой .vimrc:
vmap \c :s!^!//!<CR>
vmap \u :s!^//!!<CR>
Затем, когда в визуальном режиме вы можете нажать \c
на c, опустите блок и \u
на u. Конечно, вы можете изменить эти нажатия клавиш на что угодно.
Ответ 8
Еще один способ:
:'<,'>g/^/norm I//
/^/
- всего лишь фиктивный шаблон, соответствующий каждой строке. norm
позволяет запускать выполняемые команды нормального режима. I//
говорит, чтобы войти в режим вставки, переместив курсор в начало строки, затем вставьте следующий текст (две косые черты).
:g
часто удобен для выполнения чего-то сложного на нескольких строках, где вы можете переходить между несколькими режимами, удалять или добавлять линии, перемещать курсор, запускать кучу макросов и т.д. И вы можете сказать это для работы только на линиях, соответствующих шаблону.
Ответ 9
Для комментариев блоков кода мне нравится плагин NERD Commenter.
Выберите текст:
Shift-V
...select the lines of text you want to comment....
Комментарий:
,cc
Раскоментируйте:
,cu
Или просто переключить состояние комментария строки или блока:
,c<space>
Ответ 10
Я могу порекомендовать плагин EnhCommentify.
например. поместите это в свой vimrc:
let maplocalleader=','
vmap <silent> <LocalLeader>c <Plug>VisualTraditional
nmap <silent> <LocalLeader>c <Plug>Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'
вы можете прокомментировать/раскомментировать (выбранные) строки с помощью ", c"
Ответ 11
Отметьте область для комментариев как визуальный блок (<C-V
)
и do c#<ESC>p
-
c
помещаем его в "#"
- верните его
Если вы делаете это часто, определите короткий фрагмент (пример \q
) в вашем .vimrc
:vmap \q c#<ESC>p
Ответ 12
Чтобы вставить "ABC" в начале каждой строки:
1) Перейти в командный режим
2):% нормы я азбуки
Ответ 13
В случае, если кто-то выделил несколько строк, на самом деле это абзац, нет необходимости выбирать строки вручную. Vim может сделать это для вас:
-
vip
: выделите и отметьте весь абзац -
shift-i
: вставить текст в начале строки -
escape
: выйти из режима вставки/войти в нормальный режим [начало строки все еще выбрано] -
escape
: отменить выбор начала строки