【问题标题】:flyspell correct the previous to previous mistakeflyspell 纠正前一个到前一个错误
【发布时间】:2012-05-20 19:59:22
【问题描述】:

假设我的缓冲区内容如下

teh msot |

光标位于|。通常我可以通过单个 C-; 按下(flyspell-auto-correct-previous-word)将 msot 更正为 most。我想要的是将teh 更正为the,即之前的错误。 (或一般第 n 个咒语)

似乎flyspell-auto-correct-previous-word 正在接受数值参数,但没有产生预期的结果。

我错过了什么。?

更新:

为什么我需要这个。,当我写研究笔记时,flyspell 错误地将一些科学单词标记为错误。所以需要跳过一两个错误标记。

【问题讨论】:

  • 将标记设置在更正的单词上是否足够,以便弹出标记并执行另一个 C-; 来更正单词?变量flyspell-auto-correct-previous-pos 保存点之前第一个错误单词的开始位置。或者,您是否特别希望完全跳过前一个单词?
  • 嗯,查看flyspell-auto-correct-previous-word 的来源,没有明显的方法可以做到这一点。它通过在窗口开始和结束之间遍历overlays-in 来工作。您必须复制此行为的一部分;一个很大的痛苦。稍后我会尝试一下。

标签: emacs flyspell


【解决方案1】:

C-h f flyspell-auto-correct-previous-word 告诉我数字参数称为“位置”。这看起来不像您正在寻找的东西。位置很可能是指缓冲区中的位置。查看 flyspell 源代码可以发现参数 没有以有意的方式使用(无法分辨出覆盖是什么......)

;*---------------------------------------------------------------------*/
;*    flyspell-auto-correct-previous-word ...                          */
;*---------------------------------------------------------------------*/
(defun flyspell-auto-correct-previous-word (position) 
  "*Auto correct the first mispelled word that occurs before point."
  (interactive "d")

  (add-hook 'pre-command-hook 
        (function flyspell-auto-correct-previous-hook) t t)

  (save-excursion
    (unless flyspell-auto-correct-previous-pos
      ;; only reset if a new overlay exists
      (setq flyspell-auto-correct-previous-pos nil)

      (let ((overlay-list (overlays-in (point-min) position))
        (new-overlay 'dummy-value))
[SNIP]

(interactive "d") 还表明,在交互式调用的情况下,point 的当前位置被分配给 position。 马蒂亚斯

【讨论】:

  • 嗯..我确实去了源头..它所做的只是用缩小的周期到达最小点,尽管错误的单词(使用 flyspell-overlay-p)在最后一个停止并尝试纠正。我虽然有些人有更好的逻辑来实现一个功能。
  • @kindahero 我几乎无法讨论一种方法相对于另一种方法的优缺点,但是需要采取哪些措施来以另一种方式做到这一点?维护可以在任何击键时更改的“拼写错误的单词”列表似乎有点开销,尤其是如果列表随着时间的推移而增长。我也不知道你要去哪里。你的问题得到回答了吗?你只是在抱怨flyspell吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-18
  • 2012-03-16
  • 2016-11-27
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多