Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Emacs中,能否计算Emacs Lisp表达式并用结果替换它?_Emacs_Elisp - Fatal编程技术网

在Emacs中,能否计算Emacs Lisp表达式并用结果替换它?

在Emacs中,能否计算Emacs Lisp表达式并用结果替换它?,emacs,elisp,Emacs,Elisp,例如,如果我有文本: Sum of items is (+ 1 2 3) 我想移到行的末尾,对表达式求值并用结果替换它,这样它的内容如下: Sum of items is 6 看看函数eval print last sexp,你可以用它来构建一些东西我的emacs fu不是很强大,所以我不知道是否有一个命令可以做到这一点,但是你可以为它制作一个(有点脆弱的)宏。。。将这些行放到.emacs中: (fset 'eval-sexp-in-place [?\M-x ?e ?v ?a ?

例如,如果我有文本:

Sum of items is (+ 1 2 3)
我想移到行的末尾,对表达式求值并用结果替换它,这样它的内容如下:

Sum of items is 6

看看函数eval print last sexp,你可以用它来构建一些东西

我的emacs fu不是很强大,所以我不知道是否有一个命令可以做到这一点,但是你可以为它制作一个(有点脆弱的)宏。。。将这些行放到
.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)
这很好,但有一个问题:你需要在sexp的末端(即在最后一个右键之后)才能让它工作


另外,我选择了一个随机的未绑定键(
C-xc-a
)——可以随意更改为您喜欢的值。

光标位于行的末尾时,C-u C-xc-e会将前面括号中表达式的值插入缓冲区。可以这样做,然后手动备份并删除原始表达式。如果工作量太大,下面是一个命令,用于计算前面的表达式并用其值替换它:

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

当我在谷歌搜索结果中遇到一个解决方案时,我正在尝试解决这个问题

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

与此相关,您可能会喜欢Luke Gorrie的“”,它在文本缓冲区中实时替换emacs lisp表达式。这是一个很好的技巧。

replace regex函数可以执行lisp生成替换


在一个简单的例子中,所讨论的sexp位于一行上,并且是唯一包含括号的东西,那么您可以匹配“(.+)”并替换为“\,(eval(read\&))”

如果您使用的是emacs starter kit by technomancy,那么就有“esk eval and replace”函数来评估elisp sexp并替换它们。默认情况下,它绑定到
C-ce