`echon` para` echomsg`

8

Los comandos echony echohlson muy útiles para generar líneas de texto con múltiples grupos resaltados dentro de la misma línea. Esto se puede usar, por ejemplo, para crear buenos mensajes de estado para complementos.

En un complemento en el que estoy trabajando, estoy usando este método exacto de salida de mensajes de estado coloreados. Sin embargo, a veces me gustaría agregar estos mensajes de message-historymanera similar a lo que obtienes echomsg. ¿Es esto de alguna manera posible? No creo que haya ninguna funcionalidad intrínseca para esto, pero ¿tal vez uno podría agregar la funcionalidad con el script vim?

Karl Yngve Lervåg
fuente
1
No entiendo cuál es la diferencia? ¿Lees las páginas de ayuda echony echomsgtrabajas igual, excepto que echomsgagrega mensajes al historial? Usted ha mencionado "He estado tratando durante algún tiempo" , usted debe decirnos qué es exactamente lo que has probado, lo que se espera que suceda, y lo hizo pasar. De esa manera, podemos intentar solucionar el problema que tiene (si lo tiene) o explicar algunos conceptos erróneos que pueda tener.
Martin Tournoij
Lo siento por no estar claro. He actualizado la pregunta para que sea más clara, en particular porque quiero que la echonfuncionalidad se combine con la adición de mensajes al historial.
Karl Yngve Lervåg

Respuestas:

9

Esto no es posible actualmente en Vim.

Internamente, :echomsgse implementa como :execute, excepto que cuando se invoca como :echomsgresultado de la ejecución se muestra con el atributo del último :echohly se guarda en la lista de mensajes ( src/eval.cfunciones de referencia ex_echohly ex_execute), que es cómo se obtiene cualquier color en un mensaje guardado.

El historial de mensajes real es una colección (lista vinculada) de cadenas con atributos, y se almacena y recupera src/message.c. Cada cadena es un mensaje (que consta de una o más líneas), y el atributo determina, entre otras cosas, el grupo de resaltado que se utilizará para la visualización. Debido a esto, cada mensaje debe resaltarse como un todo (grupo de resaltado único) y no puede haber más de un mensaje en la misma línea. ( src/message.cestructura msg_histy función de referencia ex_messages)

No puedo encontrar ninguna forma de evitar esto (pensé en usar :echohly :echonmostrar un mensaje, pero almacenar un mensaje simple en el historial. Desafortunadamente, la capacidad de agregar al historial sin mostrar también el mensaje no parece estar expuesta a ningún ex -comandos) sin modificar el código fuente de Vim.

John O'M.
fuente
1
He actualizado la pregunta para que la intención sea más clara. Creo que también podría actualizar la respuesta un poco después de mi actualización (pero eso depende de usted). Creo que su respuesta es suficiente para ser marcado como "aceptado", aunque todavía espero alguna buena idea para "piratear" la funcionalidad con el script vim.
Karl Yngve Lervåg