2008-09-28 5 views

답변

53

그것은 열등의 리스프 식을 평가하기 위해 쉽게 이맥스 - 리스프 모드 :

M-x ielm 

당신은 당신이 사용할 수있는 하나의 elisp 식을 실행하려면 Emacs manual section on "Lisp Interaction"

+1

을? 찾고, 큰 감사합니다! –

1

*scratch* 버퍼에서 C-j를 입력하여 점 이전의 표현식을 평가하면됩니다. 당신이 이맥스 리터럴 REPL에 정말 관심이 있다면

0

글쎄, 이맥스의 -batch 모드를 사용하여 하나를 작성할 수 있습니다 :

(require 'cl) 

(defun read-expression() 
    (condition-case 
     err 
     (read-string "> ") 
    (error 
    (message "Error reading '%s'" form) 
    (message (format "%s" err))))) 

(defun read-expression-from-string (str) 
    (condition-case 
     err 
     (read-from-string str) 
    (error 
    (message "Error parsing '%s'" str) 
    (message (format "%s" err)) 
    nil))) 

(defun repl() 
    (loop for expr = (read-string "> ") then (read-expression) 
     do 
     (let ((form (car (read-expression-from-string expr)))) 
      (condition-case 
       err 
       (message " => %s" (eval form)) 
      (error 
      (message "Error evaluating '%s'" form) 
      (message (format "%s" err))))))) 

(repl) 

당신은 명령 줄에서이 전화하거나 할 수 있습니다, 당신이 쉘을 실행 이맥스 버퍼 내에서 원하는 것 같이

[email protected]:~/projects/elisp$ emacs -batch -l test.el 
Loading 00debian-vars... 
> (defvar x '(lambda (y) (* y 100))) 
=> x 
> (funcall x 0.25) 
=> 25.0 
> 
[email protected]:~/projects/elisp$ 
+0

이것은 일괄 처리 모드에서 또 다른 이맥스를 실행하는 셸을 실행하는 것보다 복잡해 보입니다. 일괄 처리 모드에서는 REPL을 실행하며, 모두 주요 이맥스 런타임 내부에 있습니다. 어쨌든, 그것은 내 문제를 해결하므로 도움을 주셔서 감사합니다! –

+0

이 REPL 구현은 다중 행 입력을 처리하지 않습니다. 당신이 한 줄로 표현을 종료하지 않는 경우가 있습니다 : 그 문제를 해결하는 쉬운 방법이 있나요 (파일의 마지막 repl.el) 구문 분석 오류 '무엇을 ('내가 정확히 무엇 –

8

가장 좋은 방법은 *scratch* 버퍼입니다. 당신은 더 먼저 디버거 투입하여 REPL처럼 만들 수 있습니다

M-x set-variable debug-on-error t 

그런 식 후 라인의 버퍼에 식의 계산 결과를 삽입 할, C-x C-e 대신 C-j를 사용합니다. 명령 내역, * * * 등 대신에 *scratch* 버퍼를 이동하고 편집하면됩니다.

* * *과 같은 기능을 원한다면 보통 REPL과 비슷하게 사용하십시오. ielm을 사용해보십시오.

M-x ielm 
1

에서이 기능에 대한 자세한 내용을보실 수 있습니다 M- : 단축키로 미니 버퍼에 표현식을 입력하십시오. 다른 경우에는 스크래치 버퍼

14

Eshell을 대화 형 Elisp 인터프리터의 또 다른 옵션으로 사용할 수 있습니다.

M-x eshell 

뿐만 아니라이 (만약 윈도우 또는 cmd.exe를) 배쉬 같은 명령 쉘 그것입니다하지만 당신은 또한 대화 형으로 작성하고 Elisp 코드를 실행할 수 있습니다.

~ $ ls 
foo.txt 
bar.txt 
~ $ (+ 1 1) 
2 
+2

오케이, 그건 그냥 ... 매혹적인 ... 혼합 능력 ... 나는 확실히 이것으로 더 놀아야 할 것입니다. 질문에 대한 간접적 인 대답이지만, 저는 이것을 기쁘게 생각합니다. 대답은 여기에있다! '$ echo (버퍼 이름) | sed -e 's/\ */X/g'''는'XeshellX' 등을줍니다. – lindes

관련 문제