"공간에서"철자를 자동으로 수정할 수 있습니까?


10

질문을 게시하려고했지만 자동 수정 가능성을 검색하는 동안 Stack Overflow 에서 질문을 보았습니다 . 링크 된 질문에 대한 답변이 없으므로이 사이트에서 더 많은 행운을 얻을 것이라고 생각했습니다. 텍스트는 다음과 같습니다.

나는 단어를 잘못 입력했을 때 flyspell이 단어를 "가장 가능성이 높은"수정으로 자동 수정할 수있는 방법이 있었으면 좋겠다. 단어를 잘못 입력 한 다음 OPTION-TAB을 눌러 수정하면 flyspell ALMOST ALWAYS가 항상 기본 제안으로 올바른 수정을 선택합니다.

그러나 OPTION-TAB을 누르지 않고 잘못 입력 한 모든 단어 로이 작업을 수행하기 위해 flyspell을 원합니다. 스페이스 바를 누르고 다음 단어로 넘어 가기 만하면됩니다.

이것이 가능한가?

기본적으로 휴대 전화의 자동 수정과 같은 기능입니다. 이러한 기능은 같은 모드에 대해 가지고 도움이 될 것입니다 jabbercaptureorg-mode


편집 :

기본 플라이 스펠 기능을 덮어 쓰는 것보다이 기능을 별도의 보조 모드로 사용하고 싶습니다. 필요할 때 추가로 또는 플라이 스펠 대신 활성화 할 수 있습니다.


1
나는 그것이 가능하고 (아마도 해킹하기 어렵지 않을 수도 있음) 확신하지만 IMHO가 매우 나쁜 생각이라고 말할 의무가 있습니다.
mbork

1
@mbork 플라이 스펠의 작동 방식을 변경하는 것은 좋지 않은 생각이지만 필요에 따라 활성화 / 비활성화 할 수있는 추가 마이너 모드를 사용하면 어떤 문제가 있습니까?
Tymric

휴대 전화의 비슷한 기능에 끊임없이 짜증이납니다. 나는 그들이 ;-)하지 특히 것을, 그들이 똑똑 나보다 척 기계 좋아하지 않는다 : 그들은 어휘는 아주 가끔 특히 것을 제한 합니다 (일부 명사와 같은) 비 단어를 입력 할 수 있습니다.
mbork

@mbork True이지만 every 입력에 대해 걱정할 필요가없는 장점도 있습니다 '. 나는 독일어 키보드를 사용하는데 , 그 키에 도달 할 때마다 새끼 손가락이 분할을해야합니다
Tymric

1
@mbork "non_words"문제를 해결하기 위해 S-SPC"leave-that-word-alone"에 바인딩 할 수 있습니까?
Tymric

답변:


6

이것에 대한 내 게시물을 알려 드리겠습니다 .


abbrevs가에 대한 수정을 수행하는 가장 좋은 방법이라는 것을 알았습니다 SPC. 원하는 수정 만 정의하면됩니다. 이를 위해 다음과 같은 접근 방식을 취합니다.

  1. 아래 코드를 init 파일에 추가하십시오.
  2. 잘못 입력 할 때마다 적중 C-x C-i한 보정 중 하나를 선택하십시오.
  3. 그게 다야! 수정 사항이 자동으로 대체되며 지금부터 실수를 할 때마다 자동으로 수행됩니다.

코드는 다음과 같습니다

(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)

수동으로 수정 사항을 추가하면 번거롭게 들릴 수 있지만 실제로는 그렇지 않습니다. 몇 개의 키를 누르는 것만으로도 몇 가지 수정으로 먼 길을 갈 수 있습니다.

또한, 대안은 ( 단어가 존재하지 않을 때마다 당신을 위해 수정을 선택하십시오 ) 잘못된 수정을하지 않을 것입니다. 어쨌든 자신을 정의하는 것이 가장 좋습니다. 실제로 비 단어를 입력 하고 싶을 때의 문제도 해결합니다 .


나는에 대한 대체를 추가하는 시도 dontdon't사용 C-x C-i 1하지만이 문자를 추가 t하는 대신 ( "dont" now expands to "t" globally). 아포스트로피를 잘 처리한다고 생각하지 않습니다. 그에 대한 해결책이 있습니까?
Tymric

@Timmy 프로그래밍 모드입니까? 나에게 일어나지 않는 텍스트 모드에서.
Malabarba

나는 jabber 대화에서 그것을 시도했지만, 귀하의 의견 후에 텍스트 모드에서 테스트했으며 전 세계적으로 작동했습니다. 감사합니다
Tymric

2

간단한 시도는 다음과 같습니다.

(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)

행에 두 개 이상의 공백을 삽입하면 이상하게 작동하며 때로는 수정되는 단어의 일부가 분리됩니다. 따라서이 게시물은 커뮤니티 위키입니다. 자유롭게 개선하십시오.


6
오히려 스페이스 키만 남겨두고 대신 post-self-insert-hook스페이스 삽입을 추적하고 그에 따라 행동하십시오. 더 안전하고 효율적입니다.
lunaryorn

1

늦은 답변 은 autocorrect@ legoscia 's answer에 대한 또 다른 질문에서 영감을 얻었습니다 . 다음을 사용하여 즉석에서 자동 수정되는 빠른 마이너 모드가 flyspell있습니다. 실제로 "글로벌"은이를 알려주지 self-insert-commandflyspell-mode켜져 있는 버퍼에서만 발생 합니다.

(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)))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.