Lecturas en verde, escrituras en rojo: la feature "tonta" del IDE que en Doom estaba apagada


9 de junio de 2026

La feature que no sabías que necesitabas hasta que la tienes

Hay funciones del IDE que no salen en ningún tour de ventas pero que usas sin parar: dejas el cursor sobre una variable y, al instante, todas sus apariciones se resaltan, con un color para las lecturas y otro para las escrituras. De un vistazo ves dónde nace ese valor, dónde se toca y dónde solo se consulta. Para leer código ajeno (o el tuyo de hace seis meses) vale oro.

La traía de IntelliJ y era de las pocas cosas que de verdad echaba de menos en Emacs. Resulta que no la echaba de menos: estaba ahí, apagada.

La prueba: el mismo código, los dos editores

Arriba Doom Emacs, abajo IntelliJ. Mismo fichero, cursor sobre $item: la escritura ($item = new...) en rojo, las lecturas ($item->...) en verde. Idéntico.

Comparativa de read/write highlighting: arriba Doom Emacs, abajo IntelliJ, ambos resaltando la variable item con escritura en rojo y lecturas en verde

Cómo se hace: se llama `lsp-document-highlight`

El nombre del invento es symbol highlighting, y lo sirve el LSP (el mismo servidor de lenguaje que te da el autocompletado y el "ir a definición"). Cuando paras el cursor sobre un símbolo, el editor le pregunta al servidor "¿dónde más aparece esto?", y el servidor responde clasificando cada aparición: texto, lectura o escritura. Esos tres tipos son los que IntelliJ pinta de colores, y los que Emacs puede pintar también.

El problema es doble, y por eso no lo veías:

  1. En muchas distribuciones (Doom incluido) viene desactivado por defecto, por rendimiento.
  2. Y aunque lo enciendas, las tres caras (texto / lectura / escritura) traen el mismo color de fábrica — así que no distingues una lectura de una escritura, que era justo la gracia.

Las cuatro líneas que lo encienden

Activarlo y darle a cada tipo su color:

;; 1. Encender el resaltado de simbolo (viene apagado)
(after! lsp-mode
  (setq lsp-enable-symbol-highlighting t))

;; 2. Un color para cada tipo (venian los tres iguales)
(custom-set-faces!
  '(lsp-face-highlight-read    :background "#2e4636")                ; lectura  -> verde
  '(lsp-face-highlight-write   :background "#5c3a3a" :weight bold)   ; escritura -> rojo
  '(lsp-face-highlight-textual :background "#3a3f4b"))               ; texto    -> neutro

Recargas la config, refrescas el LSP del buffer (M-x lsp-workspace-restart o cierras y reabres el fichero), dejas el cursor sobre una variable medio segundo… y ahí está. Los colores son sugerencias: súbelos o bájalos a tu gusto (yo los dejé tirando a sutiles para no cansar la vista).

Un apunte: el tono exacto puede no salir igual que el mío si tu terminal no está en truecolor —los colores oscuros desaturados se cuantizan feo en 256 colores—, pero eso es otra historia (que conté en otro post).

Otra del IDE que ya tenías

Esto no fue programar nada nuevo: fue encender un interruptor y elegir dos colores. La feature llevaba ahí todo el tiempo, dormida y en gris. Es el patrón que me voy encontrando una y otra vez al migrar mi flujo del IDE a Doom: lo que crees que te falta casi nunca falta — está apagado, mal configurado, o se llama de una forma que no imaginabas.

Una menos en la lista de "cosas que me ataban al IDE". Y van varias.

— doomguru

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario