Как добавить префикс к каждой строке?

35

У меня есть код ниже:

Hello
There
I am some code

И хотите добавить код перед ним, например:

I said Hello
I said There
I said I am some code

Так как бы добавить префикс к каждой строке?

Люк
источник

Ответы:

47

Вы можете добавить префикс с M-x string-rectangle, который связан с C-x r t. Это часть серии команд, которая работает с прямоугольными выделениями ; этот вставляет текст в каждую строку в прямоугольнике.

Начните с установки метки в начале первой строки и переместите курсор на первый символ последней строки, которую вы хотите поставить в качестве префикса:

*Hello
 There
▮I am some code

Затем используйте C-x r t, введите свой префикс ( I said) и нажмите RET. Это добавляет текст к каждой строке в прямоугольнике:

I said Hello
I said There
I said I am some code

Если вы не наведите курсор на тот же столбец, что и ваша отметка, он перезапишет эту часть прямоугольника:

*Hello
 There
 I am▮ some code

с той же командой приводит к:

I said o
I said e
I said  some code
Тихон Джелвис
источник
3
Вы второй человек, который получил хороший ответ значок :)
Nicael
Альтернативой является использование M-x string-insert-rectangle. Это очень похоже, но string-insert-rectangle вставляет в начале каждой строки выбора, в то время как string-rectangle заменяет , так с ним вы должны быть более точным о своем выборе , если вы не хотите , чтобы перезаписать что - нибудь.
Джефф Клайтс
32

Вы можете использовать режим нескольких курсоров , чтобы поместить курсор на каждую строку. Затем любой введенный вами текст будет вставлен в каждую строку.

Вы должны начать с точки в начале фрагмента кода:

▮Hello
 There
 I am some code

Тогда ударь C->дважды. (Это рекомендуемая привязка ключа; вы должны установить ее самостоятельно.) Это создает два дополнительных курсора в следующих двух строках:

▮Hello
▮There
▮I am some code

Затем введите I said. Текст будет добавлен в каждой строке:

I said ▮Hello
I said ▮There
I said ▮I am some code

Наконец, нажмите, RETчтобы выйти из режима нескольких курсоров и оставить точку на последнем курсоре:

I said Hello
I said There
I said ▮I am some code

Вот видео, которое показывает, как это работает.

legoscia
источник
26

Лично я предпочитаю replace-regexp(замените «^» на «я сказал»).

artagnon
источник
12

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

Поместите курсор в начало первой строки и нажмите, F3чтобы начать запись, вставьте текст, переместите курсор в начало следующей строки и нажмите, F4чтобы остановить запись. Теперь нажмите еще F4раз, чтобы повторить макрос, C-2 F4повторить его дважды или C-0 F4повторять до тех пор, пока не встретится ошибка (например, отсутствие строк).

sanityinc
источник
9

Вы можете установить зло и сделать это любым количеством vi-подобных способов - я предпочитаю визуальный выбор блоков, используя Ctrl+, Vчтобы отметить каждую строку, а затем Shift+, Iчтобы вставить, а затем набрать текст, который вы хотите вставить, и, наконец, нажать, ESCчтобы выйти из режима вставки, и текст будет добавлен к каждой строке. Это очень похоже на выбор прямоугольника в emacs, но несколько меньше нажатий клавиш.

alexmurray
источник
7

Это очень похоже на ответ Артаньона, но replace-regexpне связано ни с одним ключом.

Итак, я на самом деле использую, query-replace-regexpкоторый по умолчанию привязан к, C-M-%а затем заменяется ^данным префиксом, I saidа затем набираю, !чтобы заменить все, не запрашивая больше.

b4hand
источник
4

Если вы cua-modeвключили, то:

  • C-a перейти к началу строки,
  • C-RET начать прямоугольник,
  • (клавиша «вниз») дважды, чтобы перейти к третьей строке,
  • I said как текст для вставки
  • C-RET до конца прямоугольника

Я предпочитаю cua-modeспособ работы, по сравнению со стандартным прямоугольником Emacs, где эквивалент будет:

  • C-a перейти к началу строки,
  • C-SPC начать прямоугольник,
  • (клавиша «вниз») дважды, чтобы перейти к третьей строке,
  • C-x r t I said RET вставить текст

cua-modeСохраняет два нажатия клавиш по сравнению со стандартным Emacs прямоугольником.

Но для меня дополнительным преимуществом cua-mode является то, что я могу добавлять текст в прямоугольник (лично я не знаю, как добавлять текст со стандартным прямоугольником Emacs). В режиме cua, это только одно RETнажатие клавиши, перед вводом I said.

thdox
источник