Resultado de la evaluación aritmética en el buffer, no en el área de eco

10

Windows 10, Emacs 25.1

Quiero hacer una operación aritmética hago esto: ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí

¿Cómo hago esto?

usuario8542613
fuente
¿Se supone que eso es un "no"? En caso afirmativo, Emacs puede ser el editor de malo para usted ...
wasamasa
Emacs no es un editor equivocado para mí. Lo uso por muchos años. Lo siento por mi ingles. No es mi lengua materna.
user8542613
Tengo una función en mi configuración de emacs que creo que obtuve al final de esta publicación .
ShreevatsaR
Si está en el *scratch*búfer, C-jevaluará la expresión antes del cursor y colocará el valor de la expresión en el búfer.
gboffi

Respuestas:

12

Versión corta: sí

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.

Cómo encontré esta información

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 comando eval-last-sexp(que se encuentra en el mapa global), que es una función interactiva de Lisp compilada en elisp-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.

Dan
fuente
2
Está bien, pero no es suficiente. Si uso el comando, C-u C-x C-eel resultado será (* 60 3) 180 . Pero solo necesito 180 (como en mi captura de pantalla).
user8542613
1
@ user8542613: entonces deberá escribir su propio comando.
Dan
1
@ user8542613: Creo que la respuesta de Drew hace exactamente lo que quieres. Considere cambiar las respuestas aceptadas.
Dan
6

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)))
Dibujó
fuente
3

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)))
Ícaro
fuente
1

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.

Dieter.Wilhelm
fuente