vim: ¿Cuál es la mejor manera de configurar el color de la línea de estado para cambiar, según el modo

3

Intenté mejorar mi experiencia vim tratando de cambiar el color de la línea de estado vim cada vez que cambia el modo.

He intentado esto: (encontrado aquí )

    "Automatically change the statusline color depending on mode
function! ChangeStatuslineColor()
  if (mode() =~# '\v(n|no)')
    exe 'hi! StatusLine ctermfg=008'
  elseif (mode() =~# '\v(v|V)' || g:currentmode[mode()] ==# 'V·Block' || get(g:currentmode, mode(), '') ==# 't')
    exe 'hi! StatusLine ctermfg=005'
  elseif (mode() ==# 'i')
    exe 'hi! StatusLine ctermfg=004'
  else
    exe 'hi! StatusLine ctermfg=006'
  endif

  return ''
endfunction

... e incluye:

set statusline+=%{ChangeStatuslineColor()} 

Pero hay un problema, si cambia al insertmodo y luego presiona Escpara volver al normalmodo, no cambia el color. Cambiará de nuevo el color solo cuando ingrese manualmente un modo diferente.

rossijonas
fuente

Respuestas:

0

La modificación dinámica del StatusLinegrupo de resaltado es un enfoque incorrecto. Esto anula cualquier ajuste preestablecido de su esquema de colores , y no parece funcionar (tal vez la adición de un :redraw[status]ayudaría, pero eso lo convertiría en una implementación aún más fea).

Vim permite especificar un grupo de resaltado personalizado en la línea de estado (incluso múltiple), con el %#HLname#símbolo. Ver :help 'statusline'para más detalles. Puede cambiar dinámicamente el 'statusline'valor (esto también permite diferentes colores para diferentes líneas de estado) o utilizar el %!MyStatusLine()enfoque que reevalúa el valor en sí.

Ingo Karkat
fuente
Gracias por esta respuesta! Parece ser una mejor solución de hecho. Voy a entenderlo, gracias
rossijonas