Come sostituire un personaggio con una nuova riga in Emacs?


285

Sto cercando di sostituire un personaggio - diciamo ;- con una nuova linea usando replace-stringe / o replace-regexpin Emacs.

Ho provato i seguenti comandi:

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

    Questo sostituirà ;con 2 personaggi: \n.

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

    Ciò provoca il seguente errore (mostrato nel minibuffer):

    Uso non valido di `\ 'nel testo sostitutivo.

Cosa c'è di sbagliato nell'utilizzo replace-stringper questa attività? c'è un altro modo per farlo?

Grazie.

Risposte:


427

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

  • C-qper quoted-insert,

  • C-j è una newline.

Saluti!


3
Cq è davvero quote-insertche cita il personaggio successivo.
Joe Casadonte,

2
Credo che in realtà sia "citato" anziché "virgolette", come in "quoted-insert". Almeno così è nella versione 22.1.
Bryan Oakley,

8
C-jè un 0x0acodice di controllo letterale , rispetto a Retquale è la chiave accanto al tuo preventivo e invia 0x0d. en.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell

2
Nota per gli utenti di vim, usando C-jin emacs , mentreC-m in vim .
Alpha TAN,

2
@JonathanArkell Questa è una descrizione di come funziona, ma non del perché . All'interno dell'editor, Ret produce 0x0a, quindi perché dovrebbe produrre 0x0d tra virgolette? Non ha alcun senso. (Solo perché il codice della tastiera interna è 0x0d per motivi storici? Usiamo le mappe dei tasti ovunque, perché non qui dove ha perfettamente senso?)
Vog

74

Ho trovato quattro modi per inserire una nuova riga nel minibuffer.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 è il valore ottale di newline)

  4. C-x onella finestra principale, uccidi una nuova riga con C-k, quindi C-x otorna al minibuffer, tirala conC-y


10
+1 per menzionare C-o! Un colpo di chiave in meno rispetto a C-q C-j. Non avevo mai pensato di usarlo prima.
itsjeyd

Grazie per la versione 4! Utile se hai un rimbalzo di Co e Cq.
Joachim W,

Molte grazie. Puoi spiegare perché Co funziona e Cq Cj no?
Christian Madsen,

C-onon sposta il punto dopo aver inserito la nuova riga nel minibuffer, quindi è necessario premere anche il tasto freccia destra se si desidera inserire qualcosa dopo la nuova riga nella stringa di sostituzione.
Robin Green,

Nella mia versione di Emacs 25.2.2, inserirò C-ouna nuova riga nella finestra principale quando si usa la ricerca, mentre C-q C-jinserirò la nuova riga nel minibuffer. C-ofunziona con query - sostituisci però.
TC Proctor

25

Non dimenticare che puoi sempre tagliare e incollare nel minibuffer.

Quindi puoi semplicemente copiare un carattere di nuova riga (o qualsiasi stringa) dal tuo buffer, quindi strapparlo quando ti viene richiesto il testo di sostituzione.


2
È davvero una buona idea per i personaggi che non conosco il legame chiave.
Lei

Ah ah ! così semplice !
Jérémy Pouyet,

8

Più esplicitamente:

Per sostituire il carattere punto e virgola (;) con una nuova riga, seguire questi esatti passaggi.

  1. individuare il cursore nella parte superiore sinistra del buffer contenente il testo che si desidera modificare
  2. Digitare mx replace-string e premere INVIO
  3. il mini-buffer mostrerà qualcosa del genere: Sostituisci stringa (default ^ ->):
  4. Digita il carattere che desideri sostituire. In questo caso, ; e premi INVIO
  5. il mini-buffer mostrerà qualcosa del genere: string; con:
  6. Ora esegui Cq Cj
  7. Tutte le istanze di punto e virgola verranno sostituite da una nuova riga (dalla posizione del cursore alla fine del buffer verrà ora visualizzato)

Un po 'più di quello che dice la spiegazione originale.


2

Passa alla modalità testo

M-x text-mode

Evidenzia blocco a rientro

Rientro

C+M \

Torna alla modalità qualunque ..


0

inline just: C-M-S-%(se le chiavi di associazione sono ancora predefinite) di replace-string^J

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.