`echon` para` echomsg`


8

Os comandos echone echohlsão muito úteis para gerar linhas de texto com vários grupos de destaque dentro da mesma linha. Isso pode ser usado para, por exemplo, criar boas mensagens de status para plugins.

Em um plug-in no qual estou trabalhando, estou usando esse método exato de saída de mensagens de status coloridas. No entanto, às vezes eu gostaria de adicionar essas mensagens de message-historyuma maneira semelhante à que você recebe echomsg. Isso é de alguma forma possível? Não acredito que exista alguma funcionalidade intrínseca para isso, mas talvez alguém possa adicionar a funcionalidade com o script vim?


1
Eu não entendo qual é a diferença? Ao ler as páginas de ajuda echone echomsgtrabalhar da mesma forma, exceto que echomsgadiciona mensagens ao histórico? Você mencionou "Eu venho tentando há algum tempo" , você deve nos dizer o que exatamente você tentou, o que esperava que acontecesse e o que aconteceu. Dessa forma, podemos tentar corrigir o problema que você está tendo (se houver) ou explicar algum equívoco que possa ter.
Martin Tournoij 11/03/2015

Sinto muito por não estar claro. Atualizei a pergunta para que fique mais clara, principalmente porque quero que a echonfuncionalidade seja combinada com a adição de mensagens ao histórico.
Karl Yngve Lervåg

Respostas:


9

No momento, isso não é possível no Vim.

Internamente, :echomsgé implementado como :execute, exceto que, quando chamado como :echomsgresultado da execução, é exibido com o atributo last :echohle salvo na lista de mensagens ( src/eval.cfunções de referência ex_echohle ex_execute), e é assim que você obtém qualquer cor em uma mensagem salva.

O histórico de mensagens real é uma coleção (lista vinculada) de cadeias com atributos e é armazenado e recuperado src/message.c. Cada sequência é uma mensagem (que consiste em uma ou mais linhas) e o atributo determina, entre outras coisas, o grupo de destaque a ser usado para exibição. Por esse motivo, cada mensagem deve ser destacada como um todo (grupo de destaque único) e não mais que uma mensagem pode estar na mesma linha. ( src/message.cestrutura msg_histe função de referência ex_messages)

Não consigo encontrar nenhuma maneira de contornar isso (pensei em usar :echohle :echonexibir uma mensagem, mas armazene uma mensagem simples no histórico. Infelizmente, a capacidade de adicionar ao histórico sem também exibir a mensagem não parece estar exposta a nenhum ex -comandos) sem modificar o código fonte do Vim.


1
Atualizei a pergunta para que a intenção seja mais clara. Eu acho que você também pode atualizar a resposta um pouco depois da minha atualização (mas isso é com você). Acredito que sua resposta seja suficiente para ser marcada como "aceita", embora ainda esteja esperando uma boa idéia para "invadir" a funcionalidade com o script vim.
Karl Yngve Lervåg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.