如何在 flyspell 中忽略 jQuery 选择器?

如何在 flyspell 中忽略 jQuery 选择器?

我正在使用js2-modeflyspell-prog-mode对注释和字符串进行拼写检查。

使用 jQuery 时,可以使用诸如$("#something")或 之类的选择器$('something else')。我可以配置 flyspell 不对这些字符串进行拼写检查吗?基本上,任何包裹在$(和中的字符串都可以)。处理jQuery()也很酷,但我可能可以做到。

我发现了这个问题,它很类似,但我自己无法适应它。如何在 flyspell-mode 和 flyspell-buffer 中排除 {{{... }}}?

谢谢!

答案1

简而言之,你真的不能,至少在没有对 flyspell 和/或你的主要模式进行严重的黑客攻击的情况下不能。

来自 flyspell 源

;;;###autoload
(defun flyspell-prog-mode ()
  "Turn on `flyspell-mode' for comments and strings."
  (interactive)
  (setq flyspell-generic-check-word-p 'flyspell-generic-progmode-verify)
  (flyspell-mode 1)
  (run-hooks 'flyspell-prog-mode-hook))

flyspell-generic-check-word-p我们将函数设置为该函数的相关行flyspell-generic-progmode-verify如下所示

(defun flyspell-generic-progmode-verify ()
  "Used for `flyspell-generic-check-word-p' in programming modes."
  (let ((f (get-text-property (point) 'face)))
    (memq f flyspell-prog-text-faces)))

最后我们需要看看flyspell-prog-text-faces

(defvar flyspell-prog-text-faces
  '(font-lock-string-face font-lock-comment-face font-lock-doc-face)
  "Faces corresponding to text in programming-mode buffers.")

因此现在可以很容易地看到,flyspell 正在使用文本的字体来验证其输入的内容(这实际上可能是 flyspell 处理此问题的最有效方法。这意味着它不必重新解析您的代码)。

flyspell-generic-progmode-verify您的选择要么是加载自定义版本flyspell-generic-check-word-p,要么是修改主要模式,以便为您的各种字符串生成不同的面孔。

相关内容