Esto es lo que tengo:
(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))
Mi intención es agregar esto para post-command-hookencontrar líneas donde estoy duplicando la lógica, pero cuando ejecuto el comando por segunda vez, es ineficaz (y el bloqueo de fuente antiguo todavía está en vigor).
El segundo problema es causado por el bloqueo de fuente que no se actualiza. Intenté agregar un (font-lock-mode -1) (font-lock-mode 1)a la definición, pero fue ineficaz.
Sin embargo, no tengo idea de por qué el comando solo sería bueno para una ejecución.

highlight-lines-matching-regexpinterior(let ((hi-lock-mode -1)) .. ). Lo hice para resolver el mismo problema: github.com/kaushalmodi/.emacs.d/blob/…unhighlight-regexptambién puede ser usado. Independientemente de que esta característica probablemente se implemente mejor utilizando una función de coincidencia de bloqueo de fuente que escanea el búfer en busca de líneas duplicadas y les aplica resaltado. Esto manejaría la falta de resaltado automáticamente una vez que no haya líneas duplicadas.highlight-lines-matching-regexpdebe ser aplicable a este caso, es casi un zapato. (Aunque también pensé en usar superposiciones, pero ese es un concepto con el que estoy menos familiarizado)delete-duplicate-lines, luego diferir dos búferes.Respuestas:
Eche un vistazo
font-lock-keywordsdespués de haber llamado a su función. Verá que solo tiene la expresión regular para la primera línea como la expresión regular para fontify. Todo lo que hizo fue tomar una línea determinada y poner unafont-lock-keywordsexpresión regular para que coincida con ella , por lo que solo se resaltan los duplicados de esa línea. IOW, la expresión regular para esa primera línea está codificadafont-lock-keywords.En su lugar, se puede usar una
FUNCTIONenfont-lock-keywords. Pero solo buscaría en el búfer duplicados de cada línea, a su vez, y no me molestaríafont-lock-keywords.Aquí hay una solución rápida. Utiliza la función
hlt-highlight-regionde la biblioteca Highlight (highlight.el), pero puede usar algo más si lo desea.Y aquí hay una versión que funciona en (a) la región activa o (b) el búfer completo si la región no está activa:
Y si desea una cara diferente para cada conjunto de dups , simplemente vincule una variable
faceen ellet, ysetqal(hlt-next-face)lado de dondeline-rese establece, y reemplacefont-lock-warning-faceconface. La opciónhlt-auto-face-backgroundscontrola las caras utilizadas.fuente
setq: Symbol's value as variable is void: hlt-highlight-line-dups-ignore-regexp. ¿Cómo se define esta variable?¿Qué tal usar overlay en lugar de font-lock?
Haga una región y luego
M-x my-highlight-duplicate-lines-in-regionpuede borrar todas las superposicionesM-x ov-clearfuente
Esto es un poco incompleto, pero con algo de esfuerzo (vea C-h f
ediff-buffersRETla información sobre elHOOKargumento) podría hacer que se muestre mejor / realizar una limpieza mejor al salir del modo diff:fuente
Mejora en la respuesta anterior por Shingo Fukuyama.
Esta versión busca líneas duplicadas en la región activa, pero si no hay ninguna, busca en todo el búfer.
fuente