Os comandos echon
e echohl
sã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-history
uma 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?
statusline
highlight
Karl Yngve Lervåg
fonte
fonte
echon
eechomsg
trabalhar da mesma forma, exceto queechomsg
adiciona 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.echon
funcionalidade seja combinada com a adição de mensagens ao histórico.Respostas:
No momento, isso não é possível no Vim.
Internamente,
:echomsg
é implementado como:execute
, exceto que, quando chamado como:echomsg
resultado da execução, é exibido com o atributo last:echohl
e salvo na lista de mensagens (src/eval.c
funções de referênciaex_echohl
eex_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.c
estruturamsg_hist
e função de referênciaex_messages
)Não consigo encontrar nenhuma maneira de contornar isso (pensei em usar
:echohl
e:echon
exibir 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.fonte