Jak zamienić znak na nowy wiersz w Emacsie?

285

Próbuję zastąpić znak - powiedzmy ;- nową linią za pomocą replace-stringi / lub replace-regexpw Emacsie.

Próbowałem następujących poleceń:

  • M-x replace-string RET ; RET \n

    Spowoduje to zastąpienie ;z 2 znaków: \n.

  • M-x replace-regex RET ; RET \n

    Powoduje to następujący błąd (pokazany w minibuforze):

    Nieprawidłowe użycie `\ 'w tekście zastępczym.

Co jest złego w korzystaniu replace-stringz tego zadania? Czy jest na to inny sposób?

Dzięki.

Lei
źródło

Odpowiedzi:

427

M-x replace-string RET ; RET C-q C-j.

  • C-qdla quoted-insert,

  • C-j to nowa linia.

Twoje zdrowie!

Jonathan Arkell
źródło
3
Cq to tak naprawdę quote-insertcytat następnego znaku.
Joe Casadonte,
2
Uważam, że tak naprawdę jest to „cytowany”, a nie „cytowany”, jak w „cytowanym wstawieniu”. Przynajmniej tak jest w wersji 22.1.
Bryan Oakley,
8
C-jto dosłowny 0x0akod kontrolny, w przeciwieństwie do tego, Retktóry jest kluczem obok twojego zapytania i wysłania 0x0d. en.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell
2
Uwaga dla użytkowników vim, używając C-jw emacs , natomiast C-mw vim .
Alpha TAN
2
@JonathanArkell To opis, jak to działa, ale nie dlaczego . W edytorze Ret produkuje 0x0a, więc dlaczego miałby produkować 0x0d we wstawianiu cytowanym? To nie ma sensu. (Tylko dlatego, że wewnętrzny kod klawiatury jest 0x0d ze względów historycznych? Używamy map kluczy w każdym miejscu, dlaczego nie tutaj, gdzie ma to idealny sens?)
vog
74

Są cztery sposoby na umieszczenie nowej linii w minibuforze.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 to ósemkowa wartość nowego wiersza)

  4. C-x odo głównego okna, zabij nową linię za pomocą C-k, a następnie z C-x opowrotem do minibufora, pociągnij za niąC-y

slipmthgoose
źródło
10
+1 za wzmiankę C-o! Jedno uderzenie klawisza mniej w porównaniu do C-q C-j. Nie myślałem o tym wcześniej.
itsjeyd
Dzięki za wersję 4! Pomocne, jeśli masz odbicie Co i Cq.
Joachim W
Wielkie dzięki. Czy możesz wyjaśnić, dlaczego Co działa, a Cq Cj nie?
Christian Madsen
C-onie przesuwa punktu po wstawieniu nowego wiersza w minibuforze, więc nadal musisz nacisnąć prawą strzałkę, jeśli chcesz wstawić coś po nowym wierszu w zastępującym ciągu.
Robin Green
W mojej wersji Emacsa 25.2.2 C-owprowadzę nową linię w głównym oknie podczas korzystania z wyszukiwania, natomiast wprowadzę nową C-q C-jlinię w minibuforze. C-odziała z zapytaniem - zamień jednak.
TC Proctor
25

Nie zapominaj, że zawsze możesz wyciąć i wkleić do minibufora.

Możesz więc po prostu skopiować znak nowej linii (lub dowolny ciąg) ze swojego bufora, a następnie szarpnąć go, gdy pojawi się monit o zastąpienie tekstu.


źródło
2
To naprawdę dobry pomysł dla postaci, których nie znam klawiszem.
Lei
Ach! tak prosty !
Jérémy Pouyet
8

Mówiąc dokładniej:

Aby zastąpić znak średnika (;) znakiem nowej linii, wykonaj następujące kroki.

  1. zlokalizuj kursor w lewym górnym rogu bufora zawierającego tekst, który chcesz zmienić
  2. Wpisz mx replace-string i wciśnij RETURN
  3. mini-bufor wyświetli coś takiego: Zamień ciąg (domyślnie ^ ->):
  4. Wpisz znak, który chcesz zastąpić. W tym przypadku, ; i naciśnij RETURN
  5. mini-bufor wyświetli coś takiego: string; z:
  6. Teraz uruchom Cq Cj
  7. Wszystkie wystąpienia średnika zostaną zastąpione nową linią (od położenia kursora do końca bufora)

Nieco więcej niż mówi oryginalne wyjaśnienie.

afc
źródło
2

Przełącz do trybu tekstowego

M-x text-mode

Podświetl blok do wcięcia

Akapit

C+M \

Przełącz z powrotem na dowolny tryb.

enkdr
źródło
0

inline tylko: C-M-S-%(jeśli klucze powiązania nadal są domyślne) niż replace-string^J

Aiad Faris
źródło