Come aggiungere un prefisso ad ogni riga?


35

Ho il codice qui sotto:

Hello
There
I am some code

E vuoi aggiungere il codice davanti, come:

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

Quindi, come aggiungerei un prefisso per ogni riga?

Risposte:


47

È possibile aggiungere un prefisso con M-x string-rectanglecui è associato C-x r t. Questo fa parte di una serie di comandi che opera su selezioni rettangolari ; questo inserisce il testo in ogni riga del rettangolo.

Inizia impostando il segno all'inizio della prima riga e sposta il cursore sul primo carattere dell'ultima riga che desideri aggiungere:

*Hello
 There
▮I am some code

Quindi utilizzare C-x r t, immettere il prefisso ( I said) e premere RET. Questo aggiunge il testo ad ogni riga nel rettangolo:

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

Se non allinea il cursore sulla stessa colonna del segno, sovrascriverà quella parte del rettangolo:

*Hello
 There
 I am▮ some code

con lo stesso comando risulta:

I said o
I said e
I said  some code

3
sei la seconda persona a guadagnare un badge con una buona risposta :)
nicael,

Un'alternativa è usare M-x string-insert-rectangle. È molto simile, ma si string-insert-rectangle inserisce all'inizio di ogni riga della selezione, mentre string-rectangle sostituisce , quindi con quest'ultima devi essere più preciso sulla tua selezione se non vuoi sovrascrivere nulla.
Jeff Clites,

32

È possibile utilizzare la modalità a cursori multipli , per posizionare un cursore su ogni riga. Quindi, qualsiasi testo digitato verrà inserito su ciascuna riga.

Cominceresti con il punto all'inizio del pezzo di codice:

▮Hello
 There
 I am some code

Quindi colpisci C->due volte. (Questa è l'associazione di tasti suggerita; devi configurarla tu stesso.) Questo crea due cursori extra sulle seguenti due righe:

▮Hello
▮There
▮I am some code

Quindi digitare I said. Il testo verrà aggiunto su ogni riga:

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

Infine, premi RETper uscire dalla modalità cursori multipli e lasciare il punto sull'ultimo cursore:

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

Ecco un video che mostra come funziona.


26

Personalmente, preferisco replace-regexp(sostituire "^" con "Ho detto").


12

Un'altra opzione è quella di utilizzare le macro, che possono gestire più attività rispetto alle selezioni rettangolari o ai cursori multipli, anche se è un po 'più complicato per questo caso specifico.

Posiziona il cursore all'inizio della prima riga e premi F3per iniziare la registrazione, inserisci il testo, sposta il cursore all'inizio della riga successiva e premi F4per interrompere la registrazione. Ora premi di F4nuovo per ripetere la macro, C-2 F4per ripeterla due volte o C-0 F4per ripeterla fino a quando non viene rilevato un errore (ad esempio la fine delle righe).


9

Potresti installare il male e farlo in qualsiasi numero di modi simili a vi - Preferisco la selezione del blocco visivo usando Ctrl+ Vper contrassegnare ogni riga e quindi Shift+ Iper inserire e quindi digitare il testo che vuoi inserire e infine ESCpremere per uscire dalla modalità di inserimento e il il testo verrà anteposto a ciascuna riga. Questo è molto simile alle selezioni di rettangoli di emacs, ma alcune sequenze di tasti in meno.


7

Questo è molto simile alla risposta di Artagnon, ma replace-regexpnon è vincolato a nessuna chiave.

Quindi, in realtà uso query-replace-regexpquale è associato per impostazione predefinita a, C-M-%quindi sostituisco ^con il prefisso indicato I saide quindi digito !per sostituire tutto senza più richiedere.


4

Se hai cua-modeabilitato, quindi:

  • C-a per spostarsi all'inizio della riga,
  • C-RET per iniziare il rettangolo,
  • (tasto giù) due volte per passare alla terza riga,
  • I said come testo da inserire
  • C-RET per terminare il rettangolo

Preferisco il cua-modemodo di lavorare, rispetto al rettangolo standard Emacs in cui l'equivalente sarebbe:

  • C-a per spostarsi all'inizio della riga,
  • C-SPC per iniziare il rettangolo,
  • (tasto giù) due volte per passare alla terza riga,
  • C-x r t I said RET per inserire del testo

Il cua-modesalva due pressioni dei tasti rispetto al rettangolo di standard di Emacs.

Ma per me, l'ulteriore vantaggio di cua-mode è che posso aggiungere testo al rettangolo (io personalmente non so come aggiungere testo con il rettangolo Emacs standard). Con cua-mode, è un RETsolo tasto premuto, inserito prima del I said.

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.