Les commandes echon
et echohl
sont très utiles pour produire des lignes de texte avec plusieurs groupes de surbrillance sur la même ligne. Cela peut être utilisé par exemple pour créer de jolis messages d'état pour les plugins.
Dans un plugin sur lequel je travaille, j'utilise cette méthode exacte de sortie de messages d'état colorés. Cependant, parfois, je voudrais ajouter ces messages à la message-history
manière similaire à ce que vous obtenez echomsg
. Est-ce possible? Je ne crois pas qu'il existe de fonctionnalité intrinsèque pour cela, mais peut-être que l'on pourrait ajouter la fonctionnalité avec le script vim?
statusline
highlight
Karl Yngve Lervåg
la source
la source
echon
et deechomsg
travailler de la même manière, sauf que celaechomsg
ajoute des messages à l'historique? Vous avez mentionné "J'essaie depuis un certain temps maintenant" , vous devez nous dire exactement ce que vous avez essayé, ce à quoi vous vous attendiez et ce qui s'est passé. De cette façon, nous pouvons essayer de résoudre le problème que vous rencontrez (le cas échéant) ou expliquer une idée fausse que vous pourriez avoir.echon
fonctionnalité soit combinée avec l'ajout de messages à l'historique.Réponses:
Ce n'est actuellement pas possible à Vim.
En interne,
:echomsg
est implémenté en tant que:execute
, sauf que lorsqu'il est invoqué,:echomsg
le résultat de l'exécution est affiché avec l'attribut du dernier:echohl
et enregistré dans la liste des messages (src/eval.c
fonctions de référenceex_echohl
etex_execute
), c'est ainsi que vous obtenez n'importe quelle couleur sur un message enregistré.L'historique réel des messages est une collection (liste chaînée) de chaînes avec des attributs, et est stocké et récupéré dans
src/message.c
. Chaque chaîne est un message (composé d'une ou plusieurs lignes), et l'attribut détermine, entre autres, le groupe de surbrillance à utiliser pour l'affichage. Pour cette raison, chaque message doit être mis en surbrillance dans son ensemble (groupe de surbrillance unique), et pas plus d'un message peut être sur la même ligne. (src/message.c
structuremsg_hist
et fonction de référenceex_messages
)Je ne trouve aucun moyen de contourner cela (j'ai pensé à utiliser
:echohl
et:echon
à afficher un message, mais stocker un message simple dans l'historique. Malheureusement, la possibilité d'ajouter à l'historique sans afficher également le message ne semble pas être exposée à aucun ex -commands) sans modifier le code source de Vim.la source