Cómo enviar el estado a la línea de estado de VIM después de llamar a la función personalizada de VIM (Python)

StackOverflow https://stackoverflow.com/questions/1822619

Pregunta

Acabo de crear mi primer script VIM, lo escribí en Python. Es una secuencia de comandos simple para cambiar los esquemas de color desde un directorio (/ vim / etc / colors). Me gustaría saber cómo enviar una notificación después de que el esquema de color haya cambiado con el nombre del esquema de color seleccionado a la 'línea de estado' de vim.

rson respondió a mi pregunta, aquí hay una versión actualizada (y depurada) del script para quién está interesado (funciona bien hasta donde puedo probar)

Implementado (tipo de) las sugerencias de AI y Caleb, ¡gracias !:

" toggleColorScheme 0.9 (l) 2009 by Jasper Poppe <jpoppe@ebay.com>

" cycle through colorschemes with F8 and Shift+F8
nnoremap <silent><F8> :call ToggleColorScheme("1")<CR>
nnoremap <silent><s-F8> :call ToggleColorScheme("-1")<CR>

" set directory with color schemes to cycle through
let g:Toggle_Color_Scheme_Path = "/etc/vim/colors"


function! ToggleColorScheme(paramater)
python << endpython
import vim
import os

paramater = (vim.eval('a:paramater'))
scheme_path = vim.eval('g:Toggle_Color_Scheme_Path')

colorschemes = [color.split('.')[0] for color in os.listdir(scheme_path) if color.endswith('.vim')]
colorschemes.sort()

if not vars().has_key('position'):
    start_scheme = vim.eval('g:colors_name') + '.vim'
    if start_scheme in colorschemes:
        position = colorschemes.index(start_scheme)
    else:
        position = 0

position += int(paramater)
position %= len(colorschemes)

vim.command('colorscheme %s' % colorschemes[position])
vim.command('redraw | echo "%s"' % colorschemes[position])
vim.command('return 1')
endpython
endfunction
¿Fue útil?

Solución

vim.command ('redraw | echo "% s "'% colorschemes [position])

De : ayuda echo :

  

Un rediseño posterior puede hacer que el mensaje desaparezca nuevamente.   Y dado que Vim pospone en su mayor parte volver a dibujar hasta que sea   terminado con una secuencia de comandos esto sucede   Muy a menudo. Para evitar eso, un comando anterior al   ": echo " provoca un redibujo después (los redibujos a menudo son   pospuesto hasta que escriba algo), forzar un redibujo   con el |: redibujar | mando. Ejemplo:

     
    

: nuevo | redibujar | echo " hay una nueva ventana "

  

Otros consejos

Dado que está actualizando el script aquí,

En lugar de

if argument == 'next':
    position += 1
    if position == len(colorschemes) - 1:
        position = 0
elif argument == 'prev':
    position -= 1
    if position == -1:
        position = len(colorschemes) - 1

Quizás

scroll['next'] = +1
scroll['prev'] = -1
position += scroll[argument]
position = position % len(colorschemes) 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top