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.