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?


¿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.


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)))

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)))

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.