2010-06-14 7 views

Répondre

36

Avec le curseur à la fin de la ligne, C-u C-x C-e insérera la valeur de l'expression entre parenthèses précédente dans le tampon. Vous pouvez le faire, puis sauvegarder manuellement et supprimer l'expression d'origine. Si c'est trop de travail, voici une commande qui permet d'évaluer l'expression précédente et la remplace par sa valeur:

(defun replace-last-sexp() 
    (interactive) 
    (let ((value (eval (preceding-sexp)))) 
     (kill-sexp -1) 
     (insert (format "%S" value)))) 
+0

Merci beaucoup c'est parfait – justinhj

0

regardez la fonction eval-print-last-sexp, vous pouvez construire quelque chose en l'utilisant

0

Mon emacs-fu n'est pas si fort, donc je ne sais pas s'il y a une seule commande pour le faire, mais vous pouvez fabrique toi-même une macro (un peu fragile) ... laisse tomber ces lignes dans ton .emacs:

(fset 'eval-sexp-in-place 
     [?\M-x ?e ?v ?a ?l ?- ?p ?r ?i ?n tab return ?\M-^ ?\M-^ ?\C-\M-b ?\C-\M-k ?\C-d]) 
(global-set-key [(control x) (control a)] 'eval-sexp-in-place) 

Cela fonctionne très bien, mais il y a un problème avec elle: vous devez être à la fin du sexp (à savoir après la dernière paren droite) pour le faire fonctionner.

En outre, j'ai choisi une clé non liée aléatoire (C-x C-a) - n'hésitez pas à changer cela à quelque chose de plus à votre goût.

6

que je rencontrais un aller à une solution pour cela quand je suis tombé sur un dans un résultat de recherche Google.

(defun fc-eval-and-replace() 
    "Replace the preceding sexp with its value." 
    (interactive) 
    (backward-kill-sexp) 
    (prin1 (eval (read (current-kill 0))) 
     (current-buffer))) 

http://emacs.wordpress.com/2007/01/17/eval-and-replace-anywhere/

8

À cet égard, vous "lively.el" de Luc Gorrie, qui assure un remplacement direct des emacs expressions Lisp dans un tampon de texte. C'est un hack soigné.

+0

C'est vraiment génial merci – justinhj

+0

Ouais, c'est plutôt cool. – kjfletch

2

Les fonctions replace-regex peuvent exécuter lisp pour générer les remplacements. Dans l'instance triviale où le sexp en question est sur une seule ligne, et est la seule chose contenant des parenthèses, alors vous pouvez faire correspondre "(. +)" Et remplacer par "\, (eval (lire \ &)) ".

2

Si vous utilisez le kit de démarrage emacs par technomancy, il existe une fonction "esk-eval-and-replace" qui évalue le sexp elisp et les remplace. Son lien à C-c e par défaut.

Questions connexes