2010-06-14 14 views

Respuesta

36

Con el cursor al final de la línea, C-u C-x C-e insertará el valor de la expresión entre paréntesis anterior en el búfer. Podrías hacer eso, luego hacer una copia de seguridad manual y eliminar la expresión original. Si eso es demasiado trabajo, aquí hay un comando que evalúa la expresión anterior y lo sustituye por su valor:

(defun replace-last-sexp() 
    (interactive) 
    (let ((value (eval (preceding-sexp)))) 
     (kill-sexp -1) 
     (insert (format "%S" value)))) 
+0

Muchas gracias perfecto – justinhj

0

mira a la función eval-print-last-sexp, puedes construir algo usándolo

0

Mi emacs-fu no es tan fuerte, así que no sé si hay un solo comando para hacerlo, pero puedes hazte una macro (algo frágil) para ello ... suelta estas líneas en tu .emacs:

(fset 'eval-sexp-in-place 
     [?\M-x ?e ?v ?a ?l ?- ?p ?r ?i ?n tab return ?\M-^ ?\M-^ ?\C-\M-b ?\C-\M-k ?\C-d]) 
(global-set-key [(control x) (control a)] 'eval-sexp-in-place) 

Esto funciona bien, pero hay un problema con él: hay que estar al final de la sexp (es decir, después de la última derecha, paren) para que funcione.

Además, elegí una clave al azar (C-x C-a) - siéntete libre de cambiar eso a algo más a tu gusto.

6

que estaba teniendo un ir en una solución para esto cuando me encontré con uno de cada resultado de búsqueda de Google.

(defun fc-eval-and-replace() 
    "Replace the preceding sexp with its value." 
    (interactive) 
    (backward-kill-sexp) 
    (prin1 (eval (read (current-kill 0))) 
     (current-buffer))) 

http://emacs.wordpress.com/2007/01/17/eval-and-replace-anywhere/

8

En relación con esto, que le gustaría Lucas Gorrie de "lively.el", que proporciona el reemplazo directo de emacs expresiones Lisp en un búfer de texto. Es un truco limpio.

+0

Eso es realmente genial gracias – justinhj

+0

Sí, esto es genial. – kjfletch

2

funciones de reemplazo-regex pueden ejecutar lisp para generar los reemplazos.

En la instancia trivial donde sexp en cuestión está en una sola línea, y es lo único que contiene paréntesis, puede hacer coincidir "(. +)" Y reemplazar por "\, (eval (leer \ &)) ".

2

Si está utilizando el kit de inicio de emacs de technomancy, existe la función "esk-eval-and-replace" que evalúa el elisp sexp y lo reemplaza. Se une a C-c e de forma predeterminada.

Cuestiones relacionadas