6

Emacs Lisp にはreplace-stringがありますが、ありませんreplace-char。「タイポグラフィ」のカーリー クォート (この文字の Emacs コードは 16 進数の 53979) を通常の ASCII クォートに置き換えたいのですが、次のようにできます。

(replace-string (make-string 1 ?\x53979) "'")

で良いと思いますreplace-char

これを行う最善の方法は何ですか?

4

4 に答える 4

7

使用しない理由

(replace-string "\x53979" "'")

また

(while (search-forward "\x53979" nil t)
    (replace-match "'" nil t))

replace-string のドキュメントで推奨されているように?

于 2008-09-18T21:37:44.690 に答える
2

これはどうですか

(defun my-replace-smart-quotes (beg end)
  "replaces ’ (the curly typographical quote, unicode hexa 2019) to ' (ordinary ascii quote)."
  (interactive "r")
  (save-excursion
    (format-replace-strings '(("\x2019" . "'")) nil beg end)))

dotemacsにそれを入れたら、(ブログなどからの)elispサンプルコードをスクラッチバッファーに貼り付け、すぐにCM-\(正しくインデントする)を押してから、Mx my-replace-smart-quotes(修正する)を押すことができますスマートクォート)そして最後にCx Ce(それを実行するため)。

カーリークォートは常にヘキサ2019であることがわかりましたが、あなたの場合は53979であると確信していますか?CuCx=でバッファ内の文字をチェックできます。

my-replace-smart-quotesの定義で「\x2019」の代わりに「'」を記述しても問題ないと思います。それはただ安全側にあることです。

于 2009-06-27T14:12:23.150 に答える
2

これは確かにreplace-charの方が優れています。コードを改善する方法はありますか?

それが問題になるまで実際に遅いですか?私の elisp はたいてい途方もなく非効率的で、私は気づきません。(ただし、次の MS ライブ検索を構築する場合は、エディター ツールにのみ使用します。YMMV です。)

また、ドキュメントを読む:

This function is usually the wrong thing to use in a Lisp program.
What you probably want is a loop like this:
  (while (search-forward "’" nil t)
    (replace-match "'" nil t))

この回答は、現在 GPL ライセンスになっている可能性があります。

于 2008-09-18T08:55:04.413 に答える