2013-06-14 4 views
4

ielm에 문자열을 인쇄하고 싶습니다. 인쇄 된 표현을 인쇄하고 싶지 않습니다. 문자열 자체가 필요합니다. 이 결과를 원합니다 :ielm을 사용하여 Emacs lisp에 문자열을 인쇄하려면 어떻게해야합니까?

ELISP> (some-unknown-function "a\nb\n") 
a 
b 
ELISP> 

나는 이것을 할 방법이 없습니다. 명백한 기능 printprinc하지만이 나에게 인쇄 표현 제공 :

ELISP> (print "* first\n* second\n* third\n") 
"* first\n* second\n* third\n" 

내가 pppp-escape-newlines 연주했지만, 이들은 여전히 ​​다른 문자를 이스케이프 :이게 가능

ELISP> (setq pp-escape-newlines nil) 
nil 
ELISP> (pp "a\n") 
"\"a 
\"" 

를? 큰 문자열을 검사 할 경우 message은 잘라 내지 않습니다.

답변

7

버퍼에 직접 삽입하는 방법은 어떻습니까? 당신을 얻는다

(defun p (x) (move-end-of-line 0) (insert (format "\n%s" x))) 

:

ELISP> (p "a\nb\n") 
a 
b 

nil 
ELISP> 

편집 : 사용 format 문자열보다 다른 일을 인쇄 할 수 있습니다합니다.

+0

+1 매우 유용합니다, 내 init.el에'추가 p'했습니다! –

+0

영리한 해킹, 나는 그것을 좋아한다! :) –

2
;;; Commentary: 

;; Provides a nice interface to evaluating Emacs Lisp expressions. 
;; Input is handled by the comint package, and output is passed 
;; through the pretty-printer. 

IELM는 (pp-to-string ielm-result)는 (그래서 pp-escape-newlines를 결합하는 것은 일반적으로 효과가있다)를 사용하지만 모두 pp를 우회하려는 경우 다음 IELM는 제공하지 않는다, 그래서 나는 숀의 대답은 당신의 최선의 선택입니다 생각한다.

ELISP> (setq pp-escape-newlines nil) 
nil 
ELISP> "foo\nbar" 
"foo 
bar" 
1

@ Sean의 대답은 세션의 일부로 문자열을 표시하려는 경우 정확합니다.

그러나 큰 문자열을 검사하려고한다고 가정합니다. 다른 방법은 문자열을 별도의 창에 넣는 것입니다. 이 작업을 수행하려면 with-output-to-temp-buffer을 사용할 수 있습니다. 예 :

(with-output-to-temp-buffer "*string-inspector*" 
    (print "Hello, world!") 
    nil) 

새 창이 열리 며 (또는 이미있는 경우 출력이 변경됩니다). 도움말 모드이므로 읽기 전용이므로 q으로 닫을 수 있습니다. 당신이 당신의 출력 버퍼에 좀 더 정교한 물건을 수행 할 경우

당신과 같이, 대신 with-temp-buffer-window을 사용할 수

(with-temp-buffer-window "*string-inspector*" 
         #'temp-buffer-show-function 
         nil 
    (insert "hello, world!!")) 
관련 문제