`echon` per` echomsg`


8

I comandi echone echohlsono molto utili per emettere righe di testo con più gruppi di evidenziazione all'interno della stessa riga. Questo può essere usato, ad esempio, per creare simpatici messaggi di stato per i plugin.

In un plugin su cui sto lavorando, sto usando questo metodo esatto per inviare messaggi di stato colorati. Tuttavia, a volte vorrei aggiungere questi messaggi message-historyin modo simile a quello che ottieni echomsg. Questo è in qualche modo possibile? Non credo ci siano funzionalità intrinseche per questo, ma forse si potrebbe aggiungere la funzionalità con lo script VIM?


1
Non capisco qual è la differenza? Da leggere le pagine di aiuto echone echomsglavorare allo stesso modo, tranne che echomsgaggiunge messaggi alla cronologia? Hai citato "Ci sto provando da un po 'di tempo" , dovresti dirci cosa hai provato esattamente, cosa ti aspettavi e cosa è successo. In questo modo possiamo provare a risolvere il problema che stai riscontrando (se presente) o spiegare alcuni equivoci che potresti avere.
Martin Tournoij,

Mi dispiace per essere poco chiaro. Ho aggiornato la domanda per renderla più chiara, in particolare per il fatto che voglio la echonfunzionalità combinata con l'aggiunta di messaggi alla cronologia.
Karl Yngve Lervåg,

Risposte:


9

Questo non è attualmente possibile in Vim.

Internamente, :echomsgviene implementato come :execute, tranne che quando viene richiamato come :echomsgrisultato dell'esecuzione viene visualizzato con l'attributo dell'ultimo :echohle salvato nella lista dei messaggi ( src/eval.cfunzioni di riferimento ex_echohle ex_execute), che è come ottenere qualsiasi colore su un messaggio salvato.

La cronologia dei messaggi effettiva è una raccolta (elenco collegato) di stringhe con attributi e viene archiviata e recuperata in src/message.c. Ogni stringa è un messaggio (costituito da una o più righe) e l'attributo determina, tra le altre cose, il gruppo di evidenziazione da utilizzare per la visualizzazione. Per questo motivo, ogni messaggio deve essere evidenziato come un intero (singolo gruppo di evidenziazione) e non più di un messaggio può trovarsi sulla stessa riga. ( src/message.cstruttura msg_histe funzione di riferimento ex_messages)

Non riesco a trovare alcun modo per aggirare questo (ho pensato di utilizzare :echohle :echonvisualizzare un messaggio, ma memorizzare un semplice messaggio nella cronologia. Sfortunatamente, la possibilità di aggiungere alla cronologia senza anche visualizzare il messaggio non sembra essere esposta a nessun ex -comandi) senza modificare il codice sorgente di Vim.


1
Ho aggiornato la domanda in modo che l'intento sia più chiaro. Penso che potresti anche aggiornare leggermente la risposta dopo il mio aggiornamento (ma dipende da te). Credo che la tua risposta sia sufficiente per essere contrassegnato come "accettato", anche se sto ancora sperando in qualche buona idea per "hackerare" la funzionalità con lo script vim.
Karl Yngve Lervåg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.