スマート引用符を自動的に削除する


18

特に、Googleドキュメントなどからテキストをコピーする場合、Emacsにスマートな二重引用符、スマートな単一引用符、およびあらゆる種類のem-dashおよびen-dash文字を自動的に削除して、それらをasciiに相当するものに置き換えたいと思います。

これを自動的に行うようにEmacsを構成する方法はありますか?または、それをむき出しにして、バッファまたは領域でそれを行う関数を呼び出すことができますか?


1
私はこのアイデアが好きです。以前は(occur "[^[:ascii:]]")、手動でクリーンアップするためにバッファー内で非ASCII文字を見つけていましたが、一般的な文字を自動的に置き換えると便利です。
グルーカス

すべての「スマート」キャラクターとそのASCII同等物をリストする場所はありますか?
ジョナサンリーチペピン

回答:


15

SUに基づく:コピーペーストでスマートクォートを削除する方法

次のようなものを試すことができます:

(defcustom smart-to-ascii '(("\x201C" . "\"")
                ("\x201D" . "\"")
                ("\x2018" . "'")
                            ("\x2019" . "'")
                            ;; en-dash
                            ("\x2013" . "-")
                            ;; em-dash
                            ("\x2014" . "-"))
  ""
  :type '(repeat (cons (string :tag "Smart Character  ")
                       (string :tag "Ascii Replacement"))))

(defun replace-smart-to-ascii (beg end)
  (interactive "r")
  (format-replace-strings smart-to-ascii
                          nil beg end))

これをdefcustomとして使用して、必要な文字に合わせて文字を追加/調整できるようにします。


これは完全なソリューションではありません。Unicodeには、さまざまな種類の引用符やダッシュのような文字(たとえば、改行なしのハイフン\ u2011)ごとに多くのシンボルがあり、それらはすべて時折表示されます。ユニコードが成長しても、網羅的なリストが時間の経過とともに網羅されるかどうかはわかりません。
ペティス14年

1
@Peterisは、リストが最新の状態に保たれていると想定しています(そのようなリスト/参照が必要です)は、長期的には機能します。私の選択は、リーHが言及したものに完全に基づいていました。この場合、完全なリストを提供しようとはしていませんでした。取得した他のリストに合わせてカスタマイズできる出発点です。
ジョナサンリーチペピン

alistで定義されている文字を置き換えた後、呼び出しhighlight-regexpて、リージョン内の残りの非ASCII文字を強調表示できます。
グルーカス14年

8

@Jonathanが投稿したものに追加するために、これを自動化することができます(これにより、ヤンクは最初からこれらの文字を追加しません)。

(advice-add 'yank :after (lambda (&optional ignore)
                           (replace-smart-to-ascii (mark) (point)))
            '(name replace-smart))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.