vim – Incluir cadena de color en la línea de estado

Tengo alguna función definida como

function! myfunc()
    let s = 'hello world'
    return s
endfunction

y puedo incluir esto en mi línea de estado como statusline =% {myfunc ()}, que imprime “hola mundo”. También puedo colorearlo como statusline =% # mycolor #% {myfunc ()} donde mycolor es un color que he definido.

Ahora quiero colorear cada una de las palabras por separado, así que redefino mi función como

function! myfunc()
    let s = '%#mycolor1#hello %#mycolor2#world'
    return s
endfunction

Sin embargo, cuando configuro esto en la línea de estado, la salida es simplemente la cadena literal “% # mycolor1 # hello% # mycolor2 # world”, mientras que quiero que el color sea hola de acuerdo con mycolor1 y coloreado de acuerdo con mycolor2.

¿Cómo voy a hacer esto?

Mejor respuesta
Creo que esta utilidad vim puede responder parcialmente a tu pregunta:

http://www.vim.org/scripts/script.php?script_id=3383

Así que parece que no puedes tener cambios de color dentro de tu función ‘myfunc’. Pero puede obtener cambios de color al asignar statusline usando un comando exec, por ejemplo:

:let sl_statement = 'set statusline=%#' . color1highlight .
                 \   '#%{myfunc1()}%#' . color2hl . '#%{myfunc2()}'
:exec sl_statement

Por favor indique la dirección original:vim – Incluir cadena de color en la línea de estado - Código de registro