Jak dodać prefiks do każdej linii?

35

Mam poniższy kod:

Hello
There
I am some code

I chcesz dodać kod przed nim, na przykład:

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

Jak więc dodać prefiks do każdej linii?

Luke
źródło

Odpowiedzi:

47

Możesz dodać przedrostek M-x string-rectangle, który jest związany C-x r t. Jest to część serii poleceń, które działają na zaznaczeniach prostokątnych ; ten wstawia tekst w każdym wierszu prostokąta.

Rozpocznij od ustawienia znacznika na początku pierwszego wiersza i przesuń kursor do pierwszego znaku ostatniego wiersza, który chcesz poprzedzić:

*Hello
 There
▮I am some code

Następnie użyj C-x r t, wprowadź prefiks ( I said) i naciśnij RET. To dodaje tekst do każdej linii w prostokącie:

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

Jeśli nie ustawisz kursora w tej samej kolumnie co znak, zastąpi on tę część prostokąta:

*Hello
 There
 I am▮ some code

z tym samym poleceniem powoduje:

I said o
I said e
I said  some code
Tikhon Jelvis
źródło
3
jesteś drugą osobą, która zdobyła znaczek dobrej odpowiedzi :)
nicael
Alternatywą jest użycie M-x string-insert-rectangle. Jest bardzo podobny, ale string-insert-rectangle wstawia na początku każdej linii zaznaczenia, podczas gdy string-rectangle zastępuje , więc w tym drugim przypadku musisz być bardziej precyzyjny w wyborze, jeśli nie chcesz niczego zastępować.
Jeff Clites,
32

Możesz użyć trybu wielu kursorów , aby umieścić kursor w każdej linii. Następnie każdy wpisany tekst zostanie wstawiony w każdym wierszu.

Zacząłbyś od punktu na początku fragmentu kodu:

▮Hello
 There
 I am some code

Następnie naciśnij C->dwa razy. (Jest to sugerowane powiązanie klawiszy; musisz je skonfigurować samodzielnie). Spowoduje to utworzenie dwóch dodatkowych kursorów w następujących dwóch wierszach:

▮Hello
▮There
▮I am some code

Następnie wpisz I said. Tekst zostanie dodany w każdym wierszu:

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

Na koniec naciśnij, RETaby wyjść z trybu wielu kursorów i pozostaw punkt na ostatnim kursorze:

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

Oto wideo, które pokazuje, jak to działa.

legoscia
źródło
26

Osobiście wolę replace-regexp(zastąp „^” słowem „powiedziałem”).

artagnon
źródło
12

Inną opcją jest użycie makr, które mogą obsłużyć więcej zadań niż zaznaczenia prostokątne lub wiele kursorów, nawet jeśli jest to nieco bardziej skomplikowane w tym konkretnym przypadku.

Ustaw kursor na początku pierwszego wiersza i naciśnij, F3aby rozpocząć nagrywanie, wstaw tekst, przesuń kursor na początek następnego wiersza i naciśnij, F4aby zatrzymać nagrywanie. Teraz naciśnij F4ponownie, aby powtórzyć makro, C-2 F4powtórzyć je dwukrotnie lub C-0 F4powtórzyć do momentu napotkania błędu (np. Brak linii).

sanityinc
źródło
9

Możesz zainstalować zło i zrobić to na wiele sposobów podobnych do vi - wolę wizualny wybór bloku za pomocą Ctrl+, Vaby zaznaczyć każdą linię, a następnie Shift+, Iaby wstawić, a następnie wpisać tekst, który chcesz wstawić, a następnie nacisnąć, ESCaby wyjść z trybu wstawiania i tekst zostanie dodany do każdej linii. Jest to bardzo podobne do wyboru prostokąta Emacsa, ale kilka mniej naciśnięć klawiszy.

alexmurray
źródło
7

Jest to bardzo podobne do odpowiedzi artagnon, ale replace-regexpnie jest związane z żadnym kluczem.

Tak więc faktycznie używam, query-replace-regexpktóry jest domyślnie związany, C-M-%a następnie zastępuję ^go podanym prefiksem, I saida następnie piszę, !aby zamienić wszystko bez monitowania.

b4hand
źródło
4

Jeśli cua-modewłączyłeś, to:

  • C-a przejść na początek linii,
  • C-RET aby rozpocząć prostokąt,
  • (klawisz strzałki w dół) dwa razy, aby przejść do trzeciej linii,
  • I said jako tekst do wstawienia
  • C-RET aby zakończyć prostokąt

Wolę cua-modesposób pracy, niż standardowy prostokąt Emacsa, gdzie odpowiednikiem byłoby:

  • C-a przejść na początek linii,
  • C-SPC aby rozpocząć prostokąt,
  • (klawisz strzałki w dół) dwa razy, aby przejść do trzeciej linii,
  • C-x r t I said RET wstawić tekst

cua-modeOszczędza dwóch naciśnięć klawiszy w porównaniu do standardowej Emacs prostokąta.

Ale dla mnie dodatkową zaletą trybu cua jest to, że mogę dołączyć tekst do prostokąta (osobiście nie wiem, jak dołączyć tekst ze standardowym prostokątem Emacsa). W trybie cua jest to tylko jedno RETnaciśnięcie klawisza, wprowadzone przed I said.

Thdox
źródło