Folgendes habe ich:
(defun my-show-duplicate-lines ()
(interactive)
(highlight-lines-matching-regexp
(concat "^"
(regexp-quote
(substring-no-properties
(thing-at-point 'line) 0 -1))
"$")
font-lock-warning-face))
Ich möchte dies hinzufügen post-command-hook
, um Zeilen zu finden, in denen ich Logik dupliziere. Wenn ich den Befehl jedoch ein zweites Mal ausführe, ist er unwirksam (und die alte Schriftsperrung ist immer noch wirksam).
Das zweite Problem wird dadurch verursacht, dass sich die Schriftsperre nicht selbst aktualisiert. Ich habe versucht (font-lock-mode -1) (font-lock-mode 1)
, der Definition ein hinzuzufügen , aber es war unwirksam.
Ich habe jedoch keine Ahnung, warum der Befehl nur für einen Lauf gut wäre.
highlight-lines-matching-regexp
Innere einzuwickeln(let ((hi-lock-mode -1)) .. )
. Ich habe das getan, um das gleiche Problem zu lösen: github.com/kaushalmodi/.emacs.d/blob/…unhighlight-regexp
kann auch benutzt werden. Unabhängig davon lässt sich diese Funktion wahrscheinlich am besten mit einer Funktion zum Abgleichen der Schriftsperre implementieren, die den Puffer nach doppelten Zeilen durchsucht und diese hervorhebt. Dies würde die Hervorhebung automatisch behandeln, sobald keine doppelten Zeilen vorhanden sind.highlight-lines-matching-regexp
muss aber auf diesen Fall anwendbar sein - es ist fast ein Schuh-in. (Obwohl ich auch über die Verwendung von Overlays nachgedacht habe, ist mir dieses Konzept weniger vertraut.)delete-duplicate-lines
und dann zwei Puffer unterscheiden.Antworten:
Schauen Sie sich an,
font-lock-keywords
nachdem Sie Ihre Funktion aufgerufen haben. Sie werden sehen, dass es nur den regulären Ausdruck für die erste Zeile als regulären Ausdruck für die Schriftart gibt. Alles, was Sie getan haben, war, eine bestimmte Zeile aufzunehmen und einen passenden regulären Ausdruck einzufügenfont-lock-keywords
- damit nur Dups dieser Zeile hervorgehoben werden. IOW, der reguläre Ausdruck für diese erste Zeile ist fest codiertfont-lock-keywords
.Stattdessen können Sie ein
FUNCTION
in verwendenfont-lock-keywords
. Aber ich würde einfach den Puffer nacheinander nach Dups jeder Zeile durchsuchen und mich nicht darum kümmernfont-lock-keywords
.Hier ist eine schnelle Lösung. Es verwendet die Funktion
hlt-highlight-region
aus der Highlight- Bibliothek (highlight.el
), aber Sie können auch etwas anderes verwenden, wenn Sie möchten.Und hier ist eine Version, die auf (a) der aktiven Region oder (b) dem vollen Puffer funktioniert, wenn die Region nicht aktiv ist:
Und wenn Sie für jede Gruppe von Dups ein anderes Gesicht möchten, binden Sie einfach eine Variable
face
in dielet
undsetq
an die Stelle(hlt-next-face)
, an der sie festgelegtline-re
ist, und ersetzen Sie siefont-lock-warning-face
durchface
. Optionhlt-auto-face-backgrounds
steuert die verwendeten Gesichter.quelle
setq: Symbol's value as variable is void: hlt-highlight-line-dups-ignore-regexp
. Wie ist diese Variable definiert?Wie wäre es mit Overlay anstelle von Font-Lock?
Region erstellen, und dann können
M-x my-highlight-duplicate-lines-in-region
Sie alle Überlagerungen durch löschenM-x ov-clear
quelle
Dies ist etwas lückenhaft, aber mit etwas Aufwand (siehe C-h f
ediff-buffers
RETInformationen zumHOOK
Argument) können Sie die Anzeige verbessern / eine bessere Bereinigung durchführen, wenn Sie den Diff-Modus verlassen:quelle
Verbesserung der obigen Antwort von Shingo Fukuyama.
Diese Version sucht im aktiven Bereich nach doppelten Zeilen. Wenn jedoch keine vorhanden sind, wird der gesamte Puffer durchsucht.
quelle