Как вставить текст в начале многострочного выделения в vi / Vim? - PullRequest
372 голосов
/ 31 октября 2008

В Vim , как бы я вставил символы в начале каждой строки в выделении?

Например, допустим, я хочу закомментировать блок кода, добавляя // в начале каждой строки (при условии, что система комментариев моего языка не допускает комментирование блоков, например /* */). Как бы я это сделал?

Ответы [ 12 ]

653 голосов
/ 31 октября 2008
  • Нажмите Esc , чтобы войти в «командный режим»
  • Используйте Ctrl + V для входа в режим визуального блока
  • Переместить Вверх / Вниз , чтобы выделить столбцы текста в строках, которые вы хотите комментарии.
  • Затем нажмите Shift + i и введите текст, который вы хотите вставить.
  • Затем нажмите Esc , подождите 1 секунду, и вставленный текст появится в каждой строке.

Для получения дополнительной информации и чтения, прочитайте эту статью на вики-сайте vim .

168 голосов
/ 31 октября 2008

Заменяет начало каждой строки на "//":

:%s!^!//!

Заменяет начало каждой выбранной строки (используйте визуальный режим для выбора) на "//":

:'<,'>s!^!//!

Обратите внимание , что gv (в обычном режиме) восстанавливает последний визуальный выбор, это время от времени пригодится.

74 голосов
/ 06 октября 2010

Общая схема поиска и замены:

:s/search/replace/

Заменяет первое вхождение 'search' на 'replace' для текущей строки

:s/search/replace/g

Заменяет все вхождения 'search' на 'replace' для текущей строки, 'g' - сокращение от 'global'

Эта команда заменит каждое вхождение 'search' на 'replace' только для текущей строки. % Используется для поиска по всему файлу. Для подтверждения каждой замены в интерактивном режиме добавьте «c» для подтверждения:

:%s/search/replace/c

Интерактивное подтверждение замены «поиска» на «замены» для всего файла

Вместо символа% вы можете использовать диапазон номеров строк (обратите внимание, что символ '^' является специальным символом поиска для начала строки) :

:14,20s/^/#/

Вставляет символ '#' в начале строк 14-20

Если вы хотите использовать другой символ комментария (например, //), измените разделитель команды:

:14,20s!^!//!

Вставляет последовательность символов '//' в начале строк 14-20

Или вы всегда можете просто экранировать символы // вроде:

:14,20s/^/\/\//

Вставляет последовательность символов '//' в начале строк 14-20

Если вы не видите номеров строк в вашем редакторе, просто наберите следующее

:set nu
33 голосов
/ 09 апреля 2009

Еще один способ, который может быть проще для новичков:

 some█
 code
 here

Поместите курсор на первую строку, например, от

: 1 Введите

и введите следующее, чтобы войти в режим вставки и добавить свой текст:

I / / Пробел

 // █some
 code
 here

Нажмите Esc , чтобы вернуться в командный режим и использовать орграф:

j . j .

 // some
 // code
 //█here

j - это команда движения для перехода на одну строку вниз, а . повторяет последнюю введенную вами команду редактирования.

23 голосов
/ 20 ноября 2008

И еще один способ:

  • Перейти к началу строки
  • войти в режим визуальной блокировки ( CTRL - v )
  • выберите нужные линии (перемещение вверх / вниз с помощью j / k или переход на линию с [line] G )
  • нажмите I (это заглавная буква i)
  • введите символ (ы) комментария
  • нажмите ESC
17 голосов
/ 09 января 2010

Это добавляет # в начале каждой строки:

:%s/^/#/

И люди перестанут жаловаться на отсутствие должного комментирования скриптов.

14 голосов
/ 31 октября 2008

Если вы хотите получить супер фантазию, поместите это в ваш .vimrc:

vmap \c :s!^!//!<CR>
vmap \u :s!^//!!<CR>

Затем, когда в визуальном режиме вы можете нажать \c до c , опустить блок и \u до u прокомментировать его. Конечно, вы можете изменить эти сочетания клавиш на что угодно.

9 голосов
/ 02 ноября 2008

Еще один способ:

:'<,'>g/^/norm I//

/^/ - это всего лишь фиктивный шаблон для соответствия каждой строке. norm позволяет запускать команды обычного режима, которые следуют. I// говорит, что нужно войти в режим вставки, переместив курсор в начало строки, а затем вставить следующий текст (две косые черты).

:g часто удобен для выполнения чего-то сложного в нескольких строках, когда вам может потребоваться переключаться между несколькими режимами, удалять или добавлять строки, перемещать курсор, запускать несколько макросов и т. Д. работать только на линиях, которые соответствуют шаблону.

3 голосов
/ 29 августа 2009

Для комментирования блоков кода мне нравится плагин NERD .

Выберите текст:

Shift-V
...select the lines of text you want to comment....

Комментарий:

,cc

Раскоментируйте:

,cu

Или просто переключить состояние комментария для строки или блока:

,c<space>
2 голосов
/ 02 ноября 2008

Я могу порекомендовать плагин 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'

...