5

たとえば、関数内の 1 行のコード

 (message "char %c:%d" character count)

各文字のカウントを出力します。改行やタブなどの印刷できない文字の場合、出力は次のようになります。

 \n:4
 \t:6

改行とタブを文字通り印刷する代わりに。どうやってやるの?

4

3 に答える 3

7

印刷する前に特定の変数を let バインドすることで、これの一部を実現できます。

`print-escape-newlines' is a variable defined in `C source code'.
Its value is nil

Documentation:
Non-nil means print newlines in strings as `\n'.
Also print formfeeds as `\f'.

次のものもあります。

print-escape-nonascii
   Non-nil means print unibyte non-ASCII chars in strings as \OOO.

print-escape-multibyte
   Non-nil means print multibyte characters in strings as \xXXXX.

これらはすべて で動作するため、コードを形式でprin1使用できます。%S例えば:

(let ((print-escape-newlines t))
  (format "%S" "new\nline"))
于 2013-07-20T23:55:20.237 に答える
3

@wvxvwが示唆するように

(defun escaped-print (c)
  (if (and (< c ?z)
           (> c ?A))
      (string c)
    (substring (shell-command-to-string (format "printf \"%%q\" \"%s\"" (string c)))
               2 -1)))

部分文字列部分は、printf の出力から余分なものを切り取ることです。私はこのコマンドについてあまり知識がないので、完璧ではないかもしれません。

于 2013-07-20T17:18:26.957 に答える
1

これを行うことができる emacs のどこかにコードがあるかもしれませんが、1 つの方法は、特殊文字を文字列に変換する関数を記述することです。

(defun print-char(c)
  (case c 
    (?\n "\\n")
    (?\t "\\t")
    (t (string c))))

実際には各特殊文字に対して複数の文字を書いているため、文字ではなく文字列形式を使用する必要があることに注意してください。

于 2013-07-20T06:28:19.223 に答える