6

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?

2 Answers 2

6

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.

Sign up to request clarification or add additional context in comments.

Comments

3
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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.