`echon` pour` echomsg`

8

Les commandes echonet echohlsont 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-historymaniè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?

Karl Yngve Lervåg
la source
1
Je ne comprends pas quelle est la différence? De lire les pages d'aide echonet de echomsgtravailler de la même manière, sauf que cela echomsgajoute 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.
Martin Tournoij
Je suis désolé de ne pas avoir été clair. J'ai mis à jour la question afin qu'elle soit plus claire, notamment parce que je veux que la echonfonctionnalité soit combinée avec l'ajout de messages à l'historique.
Karl Yngve Lervåg

Réponses:

9

Ce n'est actuellement pas possible à Vim.

En interne, :echomsgest implémenté en tant que :execute, sauf que lorsqu'il est invoqué, :echomsgle résultat de l'exécution est affiché avec l'attribut du dernier :echohlet enregistré dans la liste des messages ( src/eval.cfonctions de référence ex_echohlet ex_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.cstructure msg_histet fonction de référence ex_messages)

Je ne trouve aucun moyen de contourner cela (j'ai pensé à utiliser :echohlet :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.

John O'M.
la source
1
J'ai mis à jour la question afin que l'intention soit plus claire. Je pense que vous pouvez également mettre à jour la réponse légèrement après ma mise à jour (mais cela dépend de vous). Je crois que votre réponse est suffisante pour être marquée "acceptée", même si j'espère toujours une bonne idée pour "pirater" la fonctionnalité avec le script vim.
Karl Yngve Lervåg