Windows 10, Emacs 25.1
Quiero hacer una operación aritmética hago esto:

El resultado está en el área de eco, pero quiero que el resultado esté en el lugar del cursor en el búfer. Algo como esto:
¿Cómo hago esto?
fuente
Windows 10, Emacs 25.1
Quiero hacer una operación aritmética hago esto:

El resultado está en el área de eco, pero quiero que el resultado esté en el lugar del cursor en el búfer. Algo como esto:
¿Cómo hago esto?
En lugar de C-x C-eevaluar la expresión, dele un argumento prefijo. C-u C-x C-eimprimirá la salida al búfer.
Puede investigar cómo Emacs hace estas cosas consultando el manual o preguntándole a Emacs.
Para ver qué hace una combinación de teclas en particular, puede usar C-h k
( describe-key). C-x
C-eEstaba evaluando la expresión con , y puede averiguar con qué llama esa combinación de teclas C-h
k C-x C-e. Eso mostrará la cadena de documentación del comando, la primera parte de la cual es:
C-x C-eejecuta el comandoeval-last-sexp(que se encuentra en el mapa global), que es una función interactiva de Lisp compilada enelisp-mode.el.Está obligado a
C-x C-e.
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)Evaluar sexp antes del punto; imprimir valor en el área de eco. Interactivamente, con un
-argumento sin prefijo, imprime la salida en el búfer actual....
Destaqué la frase clave: darle un argumento de prefijo ( C-u) imprimirá la salida en el búfer, en lugar del área de eco.
C-u C-x C-eel resultado será (* 60 3) 180 . Pero solo necesito 180 (como en mi captura de pantalla).
Vincula esto a alguna clave.
(defun foo ()
"Replace sexp before point by result of its evaluation."
(interactive)
(let ((result (pp-to-string (eval (pp-last-sexp) lexical-binding))))
(delete-region (save-excursion (backward-sexp) (point)) (point))
(insert result)))
Si desea realizar una operación aritmética e insertar el valor en el búfer, pero no le importa dónde realiza la operación, también puede hacer C-u M-:y escribir la información de la operación en el minibúfer.
Este blog tiene
(defun eval-and-replace (value)
"Evaluate the sexp at point and replace it with its value"
(interactive (list (eval-last-sexp nil)))
(kill-sexp -1)
(insert (format "%S" value)))
Prefiero hacer cálculos (también complejos) en el cálculo de Emacs C-x * *y luego copiar su resultado en el búfer donde estaba mi cursor y, qcierra los búfer de cálculo y vuelvo a esta ubicación.
*scratch*búfer,C-jevaluará la expresión antes del cursor y colocará el valor de la expresión en el búfer.