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