Скажем, у меня есть десять строк, и я хочу добавить текст к какому-то слову, которое встречается в этих строках? Это не обязательно должно быть в начале строки.
Из:
sdfsd foo sdfsd
sfsd foo fsdf
sdfsdf foo sdfsdf
кому:
sdfsd bar(foo sdfsd
sfsd bar(foo fsdf
sdfsdf bar(foo sdfsdf
Это также можно не только предварять , bar(
но на самом деле окружают foo
с bar(foo)
?
Мне также нужен быстрый способ добавлять //
комментарии к нескольким строкам (комментарии в стиле C).
Я использую Vim / GVim 7.2.
Ответы:
Перейдите к первому
foo
, нажмите Ctrl-, vчтобы войти в режим визуального блока, и нажимайте, пока неfoo
будут отмечены все строки с . Затем нажмите Shift-, iчтобы вставить в начало (блока). Когда вы закончите и нажмете Esc, вставленные символы будут добавлены в каждую строку слева от отмеченного блока.Чтобы вставить в конец, снова нажмите Ctrl- v, перемещайтесь вверх / вниз, чтобы отметить все затронутые строки, а затем нажмите Endили, $чтобы расширить выделение до конца строк. Теперь вы можете нажать Shift-, aчтобы добавить в конец всех строк, как и раньше, с помощью Shift- i.
Визуальный выбор также можно сделать с помощью обычных команд перемещения. Итак, чтобы прокомментировать целый блок в C, вы можете перейти к открывающей скобке и ввести Ctrl- v % Shift- i // Esc.
источник
i
ничего не происходит. Когда я нажимаю,shift+i
выделение исчезает, но я могу вставить текст (в текущем месте, где находится только курсор).Чтобы ответить на ваш первый вопрос, ниже
будет искать
foo
и окружать подобранный узорbar()
. Это/g
будет сделано несколько раз в одной строке.Поскольку вы просто сопоставляете
foo
, вы можете сделать простой:s/foo/bar(foo)/g
. Однако приведенное выше будет работать, если вы решите сопоставить регулярное выражение, а не простое слово (напримерf[a-z][a-z]
). Знак "&" на приведенном выше рисунке представляет то, что вы выбрали.источник
:
иs
определяет, с какими строками он работает. Ничто не означает только текущую строку.1,30
означает строки с 1 по 30 (включительно).'<,'>
означает строки в текущем визуальном выделении.Чтобы префикс набора строк, я использую один из двух разных подходов:
Один из подходов - это выбор блока (упоминается sth). В общем, вы можете выбрать прямоугольную область с ctrl-Vпоследующим перемещением курсора. После того, как вы выделили прямоугольник, нажатие shift-Iбудет вставлять символы в левую часть прямоугольника или shift-Aдобавлять их в правую часть прямоугольника. Таким образом, вы можете использовать эту технику для создания прямоугольника, который включает в себя крайний левый столбец строк, которые вы хотите префикс, нажмите shift-I, введите префикс, а затем нажмите escape.
Другой подход - использовать подстановку (как упоминал Брайан Агнью). Подстановка Брайана повлияет на весь файл (% в команде означает «все строки»). Чтобы воздействовать только на несколько строк, самый простой подход - нажать shift-V(что включает режим визуальной строки), находясь на первой / последней строке, а затем перейти к последней / первой строке. Затем введите:
^ - это регулярное выражение (в данном случае начало строки). Набрав это в режиме визуальной строки, вы увидите, что перед s автоматически вставляется '<,'>. Это означает, что диапазон замены будет визуальным выбором.
Дополнительный совет: если ваш префикс содержит косую черту, вы можете либо экранировать их с помощью обратной косой черты, либо использовать другой символ пунктуации в качестве разделителя в команде. Например, чтобы добавить комментарии к строкам C ++, я обычно пишу:
Для добавления суффикса метод замены обычно проще, если все ваши строки не имеют одинаковой длины. Просто используйте $ для шаблона вместо ^, и ваша строка будет добавлена вместо предварительно добавленной.
Если вы хотите добавить префикс и суффикс одновременно, вы можете сделать что-то вроде этого:
. * Соответствует всей строке. Символ & в замене возвращает совпадающий текст (всю строку), но теперь к нему будут добавлены ваш префикс и суффикс.
Кстати: комментируя код, вы, вероятно, захотите раскомментировать его позже. Вы можете использовать visual-block ( ctrl-V), чтобы выбрать косые черты, а затем нажать d, чтобы удалить их, или вы можете использовать подстановку (возможно, с визуальным выбором строки, выполненным с помощью shift-V), чтобы удалить ведущие косые черты, например:
источник
: normal приходит на помощь!
: norm (al) воспроизводит команды так, как если бы вы их набрали:
Или одной строкой:
Если вы используете Windows, введите ctrlqвместо ctrlv.
источник
Еще одна возможность (вероятно, не очень полезная в вашем тестовом примере, но удобная в других ситуациях) - оцепить область, которую вы хотите изменить, отметками.
:'a,'b s/foo/bar(&)/
Мне обычно нравится режим визуального блока, если все видно на экране, и я обычно предпочитаю метки, если начало и конец разделены множеством экранов.
источник
m
вместо того,'
чтобы установить новый маркер.'
для перехода к линии существующего маркера.`
переходит к строке и столбцу этого маркера.Еще одно простое регулярное выражение:
источник
Для комментариев в стиле C используйте ответ Брайана по регулярному выражению, сопоставьте конец строки
$
и вставьте прочь.источник