font-lock-keywords
関数を呼び出した後に見てください。フォント化する正規表現として、最初の行の正規表現が含まれていることがわかります。あなたがしたことは、与えられた行をピックアップしてそれに一致する正規表現を入れるfont-lock-keywords
ことだけでした-そのため、その行の重複のみが強調表示されます。IOW、その最初の行の正規表現はハードコードされていfont-lock-keywords
ます。
代わりに、使用することができますFUNCTION
でfont-lock-keywords
。しかし、私は各行の重複がないかどうかバッファを順番に検索し、に煩わされることはありませんfont-lock-keywords
。
これが1つの簡単な解決策です。ハイライトライブラリ()の関数hlt-highlight-region
を使用しますが、必要に応じて他の関数を使用できます。highlight.el
(defun highlight-line-dups ()
(interactive)
(let ((count 0)
line-re)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(setq count 0
line-re (concat "^" (regexp-quote (buffer-substring-no-properties
(line-beginning-position)
(line-end-position)))
"$"))
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(if (not (re-search-forward line-re nil t))
(goto-char (point-max))
(setq count (1+ count))
(unless (< count 2)
(hlt-highlight-region (line-beginning-position) (line-end-position)
'font-lock-warning-face)
(forward-line 1)))))
(forward-line 1)))))
そして、これは(a)アクティブなリージョン、または(b)リージョンがアクティブでない場合はフルバッファーで動作するバージョンです。
(defun highlight-line-dups-region (&optional start end face msgp)
(interactive `(,@(hlt-region-or-buffer-limits) nil t))
(let ((count 0)
line-re)
(save-excursion
(goto-char start)
(while (< (point) end)
(setq count 0
line-re (concat "^" (regexp-quote (buffer-substring-no-properties
(line-beginning-position)
(line-end-position)))
"$"))
(save-excursion
(goto-char start)
(while (< (point) end)
(if (not (re-search-forward line-re nil t))
(goto-char end)
(setq count (1+ count))
(unless (< count 2)
(hlt-highlight-region
(line-beginning-position) (line-end-position)
face)
(forward-line 1)))))
(forward-line 1)))))
そして、あなたがしたい場合はアップデートパッケージのセットごとに異なる顔そしてちょうどバインド変数face
ではlet
、とsetq
それへの(hlt-next-face)
場所の隣にline-re
設定されている、と交換してくださいfont-lock-warning-face
とface
。オプションhlt-auto-face-backgrounds
は、使用する面を制御します。
(defun hlt-highlight-line-dups-region (&optional start end msgp)
(interactive `(,@(hlt-region-or-buffer-limits) t))
(let ((hlt-auto-faces-flag t)
count line line-re ignore-re)
(save-excursion
(goto-char start)
(while (< (point) end)
(setq count 0
line (buffer-substring-no-properties (line-beginning-position)
(line-end-position))
ignore (and (not (string= "" line)) "[ \t]*")
line-re (concat "^" ignore (regexp-quote line) ignore "$"))
(save-excursion
(goto-char start)
(while (< (point) end)
(if (not (re-search-forward line-re end t))
(goto-char end)
(setq count (1+ count))
(unless (< count 2)
(hlt-highlight-region (line-beginning-position) (line-end-position))
(forward-line 1)))))
(forward-line 1)))))
highlight-lines-matching-regexp
内側を包んでみてください(let ((hi-lock-mode -1)) .. )
。私は同じ問題を解決するためにそれをした:github.com/kaushalmodi/.emacs.d/blob/...