Có thể tự động sửa lỗi chính tả trên không gian không?


10

Tôi đã định đăng câu hỏi nhưng sau đó tôi thấy nó trên Stack Overflow trong khi tìm kiếm các khả năng tự động sửa. Câu hỏi được liên kết không có câu trả lời, vì vậy tôi nghĩ rằng nó sẽ có nhiều may mắn hơn trên trang web này. Đây là văn bản:

Tôi ước có một cách để khi tôi gõ nhầm một từ, flyspell có thể tự động sửa nó thành chỉnh sửa "rất có thể". Khi tôi gõ nhầm một từ và sau đó nhấn OPTION-TAB để sửa từ đó, flyspell LUÔN LUÔN chọn chỉnh sửa theo mặc định làm gợi ý chính.

Tuy nhiên, tôi muốn flyspell thực hiện điều này với mỗi từ tôi gõ sai, KHÔNG CÓ tôi phải nhấn TÙY CHỌN-TAB. Chỉ cần nhấn thanh SPACE và chuyển sang từ tiếp theo.

Điều này có thể không?

Vì vậy, về cơ bản một cái gì đó như tự động sửa trên điện thoại di động. Một tính năng như vậy sẽ hữu ích khi có các chế độ như jabbercapturetrongorg-mode


Chỉnh sửa :

Tôi muốn có tính năng này như một chế độ nhỏ riêng biệt hơn là ghi đè chức năng bay chính tả mặc định. Nó có thể được kích hoạt thêm hoặc thay vì đánh vần khi cần


1
Tôi chắc chắn là có thể (và có lẽ không khó để hack), nhưng tôi cảm thấy bắt buộc phải nói rằng IMHO đó sẽ là một ý tưởng rất tồi.
mbork

1
@mbork Sẽ là một ý tưởng tồi khi thay đổi cách hoạt động của phép thuật ruồi, nhưng có gì sai khi có thêm một chế độ nhỏ có thể được kích hoạt / hủy kích hoạt theo yêu cầu?
Tymric

Tôi liên tục bị làm phiền bởi một tính năng tương tự trên điện thoại của tôi. Tôi không thích máy móc giả vờ rằng chúng thông minh hơn tôi, đặc biệt là chúng không ;-): vốn từ vựng của chúng rất hạn chế, đặc biệt là đôi khi tôi muốn gõ những từ không (như một số danh từ riêng).
mbork

@mbork Đúng, nhưng nó cũng có ưu điểm, như không phải lo lắng về việc gõ mỗi '. Tôi sử dụng bàn phím tiếng Đức và những người yêu màu hồng của tôi phải thực hiện việc chia tách mỗi khi tôi chạm vào phím đó
Tymric

1
@mbork Để giải quyết vấn đề "non_words", có lẽ chúng ta có thể liên kết S-SPCvới "để lại từ đó" không?
Tymric

Câu trả lời:


6

Hãy để tôi giới thiệu bạn đến bài viết của tôi về điều này .


Tôi đã thấy rằng viết tắt là cách tốt nhất để chỉnh sửa SPC, bạn chỉ cần xác định các chỉnh sửa mà bạn muốn. Vì vậy, tôi thực hiện theo cách tiếp cận sau:

  1. Thêm mã dưới đây vào tập tin init của bạn.
  2. Bất cứ khi nào bạn gõ một cái gì đó sai, nhấn C-x C-ivà chọn một trong những sửa chữa được cung cấp.
  3. Đó là nó! Việc hiệu chỉnh sẽ được tự động thay thế ở đó và sẽ tự động được thực hiện mỗi khi bạn mắc lỗi này kể từ bây giờ.

Đây là mã

(define-key ctl-x-map "\C-i" 'endless/ispell-word-then-abbrev)

(defun endless/ispell-word-then-abbrev (p)
  "Call `ispell-word'. Then create an abbrev for the correction made.
With prefix P, create local abbrev. Otherwise it will be global."
  (interactive "P")
  (let ((bef (downcase (or (thing-at-point 'word) ""))) aft)
    (call-interactively 'ispell-word)
    (setq aft (downcase (or (thing-at-point 'word) "")))
    (unless (string= aft bef)
      (message "\"%s\" now expands to \"%s\" %sally"
               bef aft (if p "loc" "glob"))
      (define-abbrev
        (if p local-abbrev-table global-abbrev-table)
        bef aft))))

(setq save-abbrevs t)
(setq-default abbrev-mode t)

Theo cách thủ công, việc thêm các chỉnh sửa nghe có vẻ cồng kềnh, nhưng thực sự không phải vậy. Bạn chỉ cần nhấn một vài phím và bạn sẽ nhận thấy một vài chỉnh sửa sẽ giúp bạn đi được một chặng đường dài.

Ngoài ra, giải pháp thay thế (để ispell chọn chỉnh sửa cho bạn mỗi khi từ không tồn tại) sẽ khiến bạn sửa sai thường xuyên hơn không. Vì vậy, tốt nhất là xác định của riêng bạn nào. Nó thậm chí còn giải quyết vấn đề khi bạn thực sự muốn gõ những từ không.


Tôi đã thử thêm một sự thay thế cho dontviệc don'tsử dụng C-x C-i 1nhưng nó đã thêm chữ cái tthay thế ( "dont" now expands to "t" globally). Tôi không nghĩ rằng nó xử lý dấu nháy đơn tốt. Có một sửa chữa cho điều đó?
Tymric

@Timmy Có phải trong chế độ lập trình không? Trong chế độ văn bản không xảy ra với tôi.
Malabarba

Tôi đã thử nó trong một cuộc trò chuyện vui nhộn, nhưng sau khi nhận xét của bạn, tôi đã thử nó ở chế độ văn bản và nó hoạt động trên toàn cầu. Cảm ơn bạn
Tymric

2

Đây là một nỗ lực đơn giản:

(defun my-flyspell-correct-on-space ()
  (interactive)
  (when flyspell-mode
    (flyspell-auto-correct-word))
  (self-insert-command 1))
(local-set-key " " 'my-flyspell-correct-on-space)

Nó hoạt động kỳ lạ khi bạn chèn nhiều hơn một khoảng trắng trong một hàng và đôi khi nó tách ra một phần của từ đang được sửa. Vì vậy, bài đăng này là wiki cộng đồng; hãy cải thiện nó


6
Tôi muốn để lại phím cách một mình, và thay vào đó sử dụng post-self-insert-hookđể theo dõi việc chèn khoảng trắng và hành động tương ứng. Điều đó an toàn hơn và hiệu quả hơn.
lunaryorn

1

Câu trả lời muộn được lấy cảm hứng từ một câu hỏi khác về câu trả lời tự độngcâu trả lời của @ legoscia . Đây là một chế độ nhỏ nhanh sẽ tự động sửa khi đang sử dụng flyspell. Đó là, trên thực tế, "toàn cầu" ở chỗ nó khuyên self-insert-command, nhưng chỉ bắn vào bộ đệm đã flyspell-modebật.

(defun flyspell-ac-word (&optional arg)
  "Autocorrect a word when entering a non-word character."
  (when flyspell-mode
    (unless (eq ?w (char-syntax (string-to-char (this-command-keys))))
      (when (or (bobp)
                (eq ?w (char-syntax (char-before))))
        (flyspell-auto-correct-word)))))

(define-minor-mode flyspell-autocorrect-mode
  "Toggle `flyspell-autocorrect-mode'.  Fires flyspell on a
just-completed word.  Only operates when `flyspell-mode' is on."
  :init-value nil
  :lighter (" AC")
  (if flyspell-autocorrect-mode
      (progn 
        (require 'flyspell)
        (advice-add #'self-insert-command :before #'flyspell-ac-word))
    (advice-remove #'self-insert-command #'flyspell-ac-word)))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.