Emacs Lisp にはreplace-string
がありますが、ありませんreplace-char
。「タイポグラフィ」のカーリー クォート (この文字の Emacs コードは 16 進数の 53979) を通常の ASCII クォートに置き換えたいのですが、次のようにできます。
(replace-string (make-string 1 ?\x53979) "'")
で良いと思いますreplace-char
。
これを行う最善の方法は何ですか?
使用しない理由
(replace-string "\x53979" "'")
また
(while (search-forward "\x53979" nil t)
(replace-match "'" nil t))
replace-string のドキュメントで推奨されているように?
これはどうですか
(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」の代わりに「'」を記述しても問題ないと思います。それはただ安全側にあることです。
これは確かに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 ライセンスになっている可能性があります。