Önceki kelimeyi etkili bir şekilde düzeltmek için Flyspell nasıl kullanılır?


18

Flyspell kullanmaya başladığım andan itibaren kullanmak her zaman acı vericiydi. Yanlış yazılan sözcükler için tüm arabelleği nadiren kontrol ederim, genellikle yazarım ve altı çizili kelimeyi gördükten sonra anında düzeltmek ve yazmaya devam etmek istiyorum. Bunun nedeni, daha sonra kelimeyi düzeltmeyi unutmaktan korkmam ve tamponun kapsamlı bir şekilde kontrol edilmesine başladığımda, iSpell çok fazla yanlış pozitif verir. Yani, neredeyse her zaman kelimeleri yazarken mümkün olan en kısa sürede düzeltirim.

İşte bildiğim yerleşik işlevler ve bunların etkin olmama nedenleri (benim için):

  • flyspell-correct-word- Bu fare tıklamasına bağlıdır. Unut gitsin, fare kullanmayacağım.

  • flyspell-correct-word-before-point- Bir süre kullandım. İki dezavantajı vardır:

    1. Varsayılan olarak, fare olmadan çalıştırılması zor olan GUI menüsünü gösterir ve 10'dan fazla öğeyle düzeltme listeniz olduğunda gerçekten hantaldır.

    2. Kelimeden çok önce işe yaramaz . Hızlı yazıyorum ve yanlış yazılmış kelimeyi bulduğumda, yanlış yazılmış kelimeyle nokta arasında bir veya iki kelimem var. Noktayı hareket ettirmem, kelimeyi düzeltmem ve geri dönmem gerekiyor. Ah.

  • flyspell-auto-correct-word - 2. noktaya bakın ↑ artı uzun bir tamamlama listeniz olduğunda (bisiklet nedeniyle) iyi çalışmaz.

S: Flyspell'i klavyeyle, bisiklet kullanmadan tamamlama listesinden seçim yapabilmek ve daha fazla veya daha az uzaktaki kelimeleri düzeltebilmek için nasıl verimli bir şekilde kullanabilirim?

Kabul edilebilir cevaplar, önceki yanlış yazılmış kelimeye gitmeye, düzeltmeye ve bunun gibi bir şeye ve muhtemelen kendi yapılandırma dosyanızdan küçük parçacıkları almaya yardımcı olan paketleri içerir, çünkü diğer insanların Flyspell ile etkili bir şekilde etkileşim kurma yollarını çözdüğüne inanıyorum.

Yanıtlar:


14

Dahili flyspell-auto-correct-previous-word, benim için bir cazibe gibi çalışıyor. Onu bağladım F12ve geriye bakmadım. Yanlış kelime kaç kelime olursa olsun benim için sürekli olarak doğru kelimeleri var.

İşlev belgelerinden:

flyspell-auto-correct-previous-word is an interactive compiled Lisp
function in `flyspell.el'.

(flyspell-auto-correct-previous-word POSITION)

For more information check the manuals.

Auto correct the first misspelled word that occurs before point.
But don't look beyond what's visible on the screen.

Ayrıca, ilk kez otomatik düzeltme size doğru kelimeyi vermediyse, F12tüm seçenekler arasında geçiş yapmak için bağlı tuşunuza ( benim durumumda) basmaya devam edin.

[Yazım denetimi yapılandırmam]


1
Görüyorum ki hala tüm olası düzeltmelerden geçmeniz gerekiyor. ttwoÖrneğin deneyin , benim menü 26 önerilen düzeltmeler görüyorum!
Mark Karpov

3
ttwotwoilk denemede otomatik olarak düzeltildi . Ama ne demek istediğini biliyorum. Pratik deneyimlerden, vakaların yaklaşık% 90'ında, ilk deneme doğru sözcüğü alır, muhtemelen kalan% 9'u 2-3 deneme gerektirir ve son% 1'i sineklik sadece bunu çözmediğinde ve gitmem gerekiyor 5+ denemelerle (veya manuel olarak düzeltirim).
Kaushal Modi

Görüyorum ki, yönteminizin kendine özgü faydaları var (basitlik). Belki sonuçta ben buna geçeceğim.
Mark Karpov

2
Çok güzel - bulmayı umduğum bu, ve kaçırdım çünkü varsayılan anahtarı başka bir şeye bağlıyordum. Bu C-;varsayılan olarak bağlıdır flyspell-auto-correct-bindingve sineklik haritasındaki başka bir anahtara bağlamak için özelleştirebilirsiniz . (Ya da elbette normal şekilde
bağlayın

6

Diğer insanların gelecekteki okuyucular için yararlı olacak farklı çözümler üreteceğinden eminim. Ancak, şu anda bununla nasıl başa çıkacağım.

Bence flyspell-correct-word-before-pointbaşlamak için iyi bir yer, çünkü en azından tuşa basarak çağrılabilir ve olası düzeltmeler menüsünü görüntüler. Menüyü düzeltmek için Avy'yi arka uç olarak kullanan Ace Popup Menu paketini yazdım . Bu , (işlev çağrılır ) kullanılan GUI açılır menüsünü, etiketli menü öğelerini sunan metinsel açılır menü ile değiştirir: bir veya iki tuş vuruşu ve işiniz bitti.flyspell-correct-word-before-pointx-popup-menu

İkinci sorunu çözmek için (“uzaktan” kelimeleri düzeltememe) Bu yardımcıyı yazdım:

(defun flyspell-correct-previous (&optional words)
  "Correct word before point, reach distant words.

WORDS words at maximum are traversed backward until misspelled
word is found.  If it's not found, give up.  If argument WORDS is
not specified, traverse 12 words by default.

Return T if misspelled word is found and NIL otherwise.  Never
move point."
  (interactive "P")
  (let* ((Δ (- (point-max) (point)))
         (counter (string-to-number (or words "12")))
         (result
          (catch 'result
            (while (>= counter 0)
              (when (cl-some #'flyspell-overlay-p
                             (overlays-at (point)))
                (flyspell-correct-word-before-point)
                (throw 'result t))
              (backward-word 1)
              (setq counter (1- counter))
              nil))))
    (goto-char (- (point-max) Δ))
    result))

Bu işe yarıyor gibi görünüyor.


5

İle dümen-flyspell verimli düzeltme listesinden seçim yapabilirsiniz. Hatalara atlamak ve bunları düzeltmek için aşağıdaki kodu kullanırım, noktanın konumunu kaydeder, mark-ringböylece daha önce başladığınız veya düzelttiğiniz sözcüklere geri dönebilirsiniz:

(defun flyspell-goto-previous-error (arg)
  "Go to arg previous spelling error."
  (interactive "p")
  (while (not (= 0 arg))
    (let ((pos (point))
          (min (point-min)))
      (if (and (eq (current-buffer) flyspell-old-buffer-error)
               (eq pos flyspell-old-pos-error))
          (progn
            (if (= flyspell-old-pos-error min)
                ;; goto beginning of buffer
                (progn
                  (message "Restarting from end of buffer")
                  (goto-char (point-max)))
              (backward-word 1))
            (setq pos (point))))
      ;; seek the next error
      (while (and (> pos min)
                  (let ((ovs (overlays-at pos))
                        (r '()))
                    (while (and (not r) (consp ovs))
                      (if (flyspell-overlay-p (car ovs))
                          (setq r t)
                        (setq ovs (cdr ovs))))
                    (not r)))
        (backward-word 1)
        (setq pos (point)))
      ;; save the current location for next invocation
      (setq arg (1- arg))
      (setq flyspell-old-pos-error pos)
      (setq flyspell-old-buffer-error (current-buffer))
      (goto-char pos)
      (if (= pos min)
          (progn
            (message "No more miss-spelled word!")
            (setq arg 0))))))


(defun check-previous-spelling-error ()
  "Jump to previous spelling error and correct it"
  (interactive)
  (push-mark-no-activate)
  (flyspell-goto-previous-error 1)
  (call-interactively 'helm-flyspell-correct))

(defun check-next-spelling-error ()
  "Jump to next spelling error and correct it"
  (interactive)
  (push-mark-no-activate)
  (flyspell-goto-next-error)
  (call-interactively 'helm-flyspell-correct))

(defun push-mark-no-activate ()
  "Pushes `point' to `mark-ring' and does not activate the region
 Equivalent to \\[set-mark-command] when \\[transient-mark-mode] is disabled"
  (interactive)
  (push-mark (point) t nil)
  (message "Pushed mark to ring"))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.