2011-02-02 25 views
41

Supongamos que tengo un archivo de texto con el contenidoAl añadir caracteres al final de cada línea en Emacs

1 
123 
12 
12345 

Si quiero añadir una 'a' en el principio de cada línea que simplemente puedo usar cuerdas-rectángulo (Cx rt), pero lo que si quiero añadir una 'a' hasta el final de cada línea, después de lo cual el archivo debe convertirse en

1a 
123a 
12a 
12345a 

Gracias.

+0

pregunta Companion, cómo quitar caracteres desde el final de cada línea ?: http: //unix.stackexchange. com/q/108459/4671 –

+0

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

Respuesta

55

usted podría utilizar replace-regexp para este fin, con el metacarácter $ expresión regular que coincide al final de la línea. Vaya al inicio del búfer y luego haga M-x replace-regexp, y responda $ y (su texto) a las dos solicitudes.

O, en emacs-hablar, por su ejemplo específico de añadir a:

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

+3

¡Doh! Mucho más bonito. –

+0

tbh, "macro de teclado" fue mi primer pensamiento, también, hasta que me detuve y pensé: "tiene que haber una manera más simple". – nelhage

+4

O 'C-M-% $ RET a RET' para hacer lo mismo más selectivamente con' query-replace-regexp' – phils

18

Las macros de teclado de Emacs son su amigo.

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

Lo cual configura la macro de teclado por: a partir de la macro de teclado (Cx (), ir al final de la línea (Ce), insertar un a, ir a la siguiente línea (Cn), y luego finaliza la grabación de macros (Cx)).

Ahora usted puede ejecutarlo (C-x e), y mantenga pulsado e para cada línea que desea que se ejecute en, o puede ejecutarlo en una región con C-x C-k r.

Si hace esto mucho, puede guardar la macro, o puede escribir una función. Esta sería una de esas funciones:

(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

Normalmente creo un macro escribiendo 'F3 End a Abajo F4' seguido por series de 'F4'. Tiendo a preferir las teclas de flecha normales y Inicio/Fin sobre los Emacsismos. –

Cuestiones relacionadas