Ergebnis der arithmetischen Auswertung im Puffer, nicht im Echobereich


10

Windows 10, Emacs 25.1

Ich möchte eine arithmetische Operation ausführen. Ich mache Folgendes: Geben Sie hier die Bildbeschreibung ein

Das Ergebnis befindet sich im Echo-Bereich, aber ich möchte, dass sich das Ergebnis an der Cursorposition im Puffer befindet. Etwas wie das:

Geben Sie hier die Bildbeschreibung ein

Wie mache ich das?


Soll das ein "Wille" sein? Wenn ja, ist Emacs möglicherweise der falsche Editor für Sie ...
wasamasa

Emacs ist für mich kein falscher Redakteur. Ich benutze es viele Jahre. Entschuldigung für mein Englisch. Es ist nicht meine Muttersprache.
user8542613

Ich habe eine Funktion in meiner Emacs-Konfiguration, die ich am Ende dieses Beitrags erhalten habe .
ShreevatsaR

Wenn Sie sich im *scratch*Puffer befinden, C-jwird der Ausdruck vor dem Cursor ausgewertet und der Wert des Ausdrucks in den Puffer gestellt.
Gboffi

Antworten:


12

Kurzfassung: ja

Anstatt C-x C-eden Ausdruck auszuwerten, geben Sie ihm ein Präfixargument. C-u C-x C-edruckt die Ausgabe in den Puffer.

Wie ich diese Informationen gefunden habe

Sie können untersuchen, wie Emacs diese Dinge tut, indem Sie im Handbuch nachsehen oder Emacs selbst fragen.

Um zu sehen, was eine bestimmte Tastenkombination bewirkt, können Sie C-h k ( describe-key) verwenden. Sie haben den Ausdruck mit ausgewertet C-x C-eund können herausfinden, womit diese Tastenkombination aufgerufen wird C-h k C-x C-e. Daraufhin wird die Dokumentzeichenfolge des Befehls angezeigt. Der erste Teil lautet:

C-x C-eführt den Befehl eval-last-sexp(in global-map gefunden) aus, bei dem es sich um eine interaktive kompilierte Lisp-Funktion handelt elisp-mode.el.

Es ist gebunden an C-x C-e.

(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)

Bewerten Sie sexp vor Punkt; Druckwert im Echo-Bereich. Drucken Sie interaktiv mit einem -Argument ohne Präfix die Ausgabe in den aktuellen Puffer.

...

Ich habe den Schlüsselbegriff hervorgehoben: Wenn Sie ihm ein Präfixargument ( C-u) geben, wird die Ausgabe in den Puffer und nicht in den Echobereich gedruckt.


2
Es ist gut, aber nicht genug. Wenn ich den Befehl benutze, ist C-u C-x C-edas Ergebnis (* 60 3) 180 . Aber ich brauche nur 180 (wie in meinem Screenshot).
user8542613

1
@ user8542613: dann musst du deinen eigenen Befehl schreiben.
Dan

1
@ user8542613: Ich denke, Drews Antwort macht genau das, was Sie wollen. Bitte erwägen Sie, akzeptierte Antworten zu wechseln.
Dan

6

Binden Sie dies an einen Schlüssel.

(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

Wenn Sie eine arithmetische Operation ausführen und den Wert in den Puffer einfügen möchten, sich aber nicht darum kümmern, wo Sie die Operation ausführen, können Sie auch C-u M-:die Operationsinfo des Minibuffers ausführen und eingeben.

Dieser Blog hat

(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

Ich bevorzuge (auch komplexe) Berechnungen in Emacs 'Berechnung C-x * *und kopiere dann das Ergebnis in den Puffer, in dem sich mein Cursor befand y, qschließe die Berechnungspuffer und bin wieder an dieser Stelle.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.