سؤال

Emacs اللثغة قد replace-string ولكن لا يوجد لديه replace-char.أريد أن تحل محل "مطبعي" مجعد ونقلت (Emacs رمز هذا الحرف هو عشري 53979) مع العادية ASCII ونقلت وأنا يمكن أن تفعل ذلك مع:

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

أعتقد أنه سيكون أفضل مع replace-char.

ما هي أفضل طريقة للقيام بذلك ؟

هل كانت مفيدة؟

المحلول

لماذا لا نستخدم فقط

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

أو

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

على النحو الموصى به في وثائق محل-السلسلة ؟

نصائح أخرى

هذه هي الطريقة التي يمكنني استبدال الأحرف في elisp:

(subst-char-in-string ?' ?’ "John's")

يعطي:

"John’s"

لاحظ أن هذه الدالة لا تقبل شخصيات السلسلة.الأول و الثاني يجب أن يكون حجة حرفي حرف (إما باستخدام ? التدوين أو string-to-char).

أيضا لاحظ أن هذه الوظيفة يمكن أن تكون مدمرة إذا الاختياري inplace حجة غير النيل.

الذي سيكون بالتأكيد أفضل مع استبدال-شار.أي طريقة لتحسين قانون بلدي ؟

هو في الواقع بطيئة إلى نقطة حيث أنه من الأمور ؟ بلدي elisp عادة ما يبعث على السخرية غير فعالة و لا إشعار.(أنا فقط استخدام أدوات محرر على الرغم من YMMV إذا كنت بناء المقبلة MS بحثا عن العيش مع ذلك.)

أيضا, قراءة المستندات:

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 الآن.

ماذا عن هذا

(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 سبيل المثال رموز (من مدونات وغيرها) إلى الصفر المخزن المؤقت ثم اضغط على الفور ج-م-\ (إلى المسافة البادئة بشكل صحيح) ثم M-x بلدي-استبدال-الذكية-نقلت (لإصلاح ونقلت الذكية) و أخيرا C-x C-e (تشغيله).

أجد أن مجعد اقتباس دائما سداسي 2019, هل أنت متأكد من أنه 53979 في قضيتك ؟ يمكنك التحقق من الأحرف في المخزن المؤقت مع C-u-C x =.

أعتقد أنك يمكن أن يكتب "'" في مكان "\x2019" في تعريف بلدي-استبدال-الذكية ونقلت يكون على ما يرام.انها مجرد أن تكون على الجانب الآمن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top