4

ielm で文字列を出力したいと思います。印刷された表現を印刷したくありません。文字列自体が必要です。この結果が欲しい:

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"

私はppandpp-escape-newlinesで遊んだことがありますが、これらはまだ他の文字をエスケープしています:

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

これは可能ですか?大きな弦を検査するため、messageカットしません。

4

3 に答える 3

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 はそれを提供しないため、Sean の回答が最良の選択肢であると思われます。

ELISP> (setq pp-escape-newlines nil)
nil
ELISP> "foo\nbar"
"foo
bar"
于 2013-06-15T01:30:31.803 に答える
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!!"))
于 2013-06-15T01:39:41.343 に答える