2011-02-02 13 views
41

Si supponga Ho un file di testo con i contenutiL'aggiunta dei caratteri alla fine di ogni riga in Emacs

1 
123 
12 
12345 

Se voglio aggiungere una 'A' all'inizio di ogni riga posso semplicemente utilizzare stringhe rettangolo (Cx rt), ma cosa succede se voglio aggiungere un 'a' alla fine di ogni riga, dopo di che il file deve diventare

1a 
123a 
12a 
12345a 

Grazie.

+0

domanda Companion, come rimuovere caratteri dalla fine di ogni riga ?: http: //unix.stackexchange. it/q/108459/4671 –

+0

Vedere http://stackoverflow.com/questions/761706/in-emacs-edit-multiple-lines-at-once/774953#774953 – gdelfino

risposta

55

si potrebbe usare replace-regexp per questo scopo, con il metacarattere $ espressione regolare che corrisponde end-of-line. Vai all'inizio del buffer, quindi esegui M-x replace-regexp e rispondi allo $ e (il tuo testo) ai due prompt.

Oppure, in emacs-parlare, per lo specifico esempio di aggiunta a:

M-< M-x replace-regexp RET $ RET a RET

+3

Doh! Molto più bello –

+0

tbh, "macro tastiera" è stato anche il mio primo pensiero, fino a quando non mi sono fermato e ho pensato "ci deve essere un modo più semplice". – nelhage

+4

Oppure 'C-M-% $ RET a RET' per fare la stessa cosa in modo più selettivo con' query-replace-regexp' – phils

18

I macro di tastiera Emacs sono tuoi amici.

C-x (C-e a C-n C-x) 

che imposta solo la macro tastiera: partendo macro di tastiera (Cx (), andare alla fine della linea (Ce), inserire un a, passare alla riga successiva (Cn), quindi terminare la registrazione macro (Cx)).

Ora è possibile eseguirlo (C-x e), e continuare a premere e per ogni linea che si desidera fare eseguire, oppure è possibile eseguirlo su una regione con C-x C-k r.

Se si esegue questa operazione molto, è possibile salvare la macro o è possibile scrivere una funzione. Questo sarebbe un tale funzione:

(defun add-string-to-end-of-lines-in-region (str b e) 
    "prompt for string, add it to end of lines in the region" 
    (interactive "sWhat shall we append? \nr") 
    (goto-char e) 
    (forward-line -1) 
    (while (> (point) b) 
    (end-of-line) 
    (insert str) 
    (forward-line -1))) 
+3

Generalmente creo una macro simile digitando 'F3 End a giù F4' seguita da serie di 'F4'. Tendo a preferire i normali tasti freccia e Home/End sopra gli Emacsism. –

Problemi correlati