Resultado da avaliação aritmética no buffer, não na área de eco

10

Windows 10, Emacs 25.1

Quero fazer alguma operação aritmética, faço o seguinte: insira a descrição da imagem aqui

O resultado está na área de eco, mas quero que o resultado esteja no lugar do cursor no buffer. Algo assim:

insira a descrição da imagem aqui

Como eu faço isso?

user8542613
fonte
Isso deveria ser um "não"? Se sim, Emacs pode ser o editor errado para você ...
wasamasa
O Emacs não é um editor errado para mim. Eu uso muitos anos. Desculpe pelo meu Inglês. Não é minha língua nativa.
user8542613
Eu tenho uma função na minha configuração do emacs que acho que recebi no final deste post .
ShreevatsaR
Se você estiver no *scratch*buffer, C-javaliará a expressão antes do cursor e colocará o valor da expressão no buffer.
Gboffi 09/09

Respostas:

12

Versão curta: sim

Em vez de C-x C-eavaliar a expressão, forneça um argumento de prefixo. C-u C-x C-eimprimirá a saída no buffer.

Como encontrei esta informação

Você pode investigar como o Emacs faz essas coisas consultando o manual ou perguntando o próprio Emacs.

Para ver o que uma combinação de teclas específica faz, você pode usar C-h k ( describe-key). Você estava avaliando a expressão com C-x C-ee pode descobrir com o que essa combinação de teclas chama C-h k C-x C-e. Isso exibirá a docstring do comando, cuja primeira parte é:

C-x C-eexecuta o comando eval-last-sexp(encontrado no mapa global), que é uma função Lisp compilada interativa em elisp-mode.el.

É obrigado a C-x C-e.

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

Avalie sexp antes do ponto; valor de impressão na área de eco. Interativamente, com um -argumento sem prefixo, imprima a saída no buffer atual.

...

Eu destaquei a frase-chave: fornecer um argumento de prefixo ( C-u) imprimirá a saída no buffer, em vez da área de eco.

Dan
fonte
2
É bom, mas não é suficiente. Se eu usar o comando, C-u C-x C-eo resultado será (* 60 3) 180 . Mas eu preciso de apenas 180 (como na minha captura de tela).
user8542613
11
@ user8542613: você precisará escrever seu próprio comando.
Dan
11
@ user8542613: Acho que a resposta de Drew faz exatamente o que você deseja. Por favor, considere mudar as respostas aceitas.
Dan
6

Vincule isso a alguma chave.

(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)))
Desenhou
fonte
3

Se você deseja fazer uma operação aritmética e inserir o valor no buffer, mas não se importa onde você faz a operação, também pode fazer C-u M-:e digitar as informações da operação no minibuffer.

Este blog tem

(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)))
Icaro
fonte
1

Prefiro fazer cálculos (também complexos) no cálculo do Emacs C-x * *e depois copiar seu resultado no buffer em que estava o cursor y, qfechar os buffers de cálculo e estou de volta a esse local.

Dieter.Wilhelm
fonte