I want to do something like
let colors = execute(":highlight")
This is obviously incorrect; all I can do is execute(":highlight")
which will open a window, but what I really need is to get the contents of that window into a variable — much like a system()
call would do for external commands. Can this be done?
There is a command called :redir
that is specifically designed to
capture the output of one or more commands into a file, a register, or
a variable. The latter option is what we want in this case:
:redir => colors
:silent highlight
:redir END
To see the complete list of the ways to invoke the command, refer to
:help :redir
. See also my answer to the question “Extending
a highlighting group in Vim” for another practical use of :redir
.
let colors = lh#askvim#exe(':hi')
Which just encapsulates :redir
. Or even better:
let colors = lh#askvim#execute(':hi')
which returns the result as a list variable, either through :redir
if we have no choice, or through execute()
when it's defined. This new approach is to be prefered as it has less undesired side effects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With