para - Cómo enviar el estado a la línea de estado de VIM después de llamar a la función VIM personalizada(Python)
vim python 3 (2)
Acabo de crear mi primer script VIM, lo escribí en Python. Es una secuencia de comandos simple para cambiar las combinaciones de colores de un directorio (/ vim / etc / colours). Me gustaría saber cómo enviar una notificación después de que el esquema de colores cambie con el nombre del esquema de color seleccionado a la ''línea de estado'' de vim ''.
rson dio una respuesta a mi pregunta, aquí hay una versión actualizada (y depurada) del guión para quién está interesado (funciona bien en cuanto puedo probar)
Implementado (tipo de) las sugerencias de AI y Caleb, gracias !:
" toggleColorScheme 0.9 (l) 2009 by Jasper Poppe <[email protected]>
" 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
vim.command(''redraw | echo "%s"'' % colorschemes[position])
De :help echo
:
Un redibujado posterior puede hacer que el mensaje desaparezca nuevamente. Y dado que Vim principalmente pospone el redibujado hasta que haya terminado con una secuencia de comandos, esto sucede con bastante frecuencia. Para evitar que un comando anterior a ": echo" provoque un rediseño después (los rediseños a menudo se posponen hasta que escriba algo), fuerce un redibujado con | | redraw | mando. Ejemplo:
: nuevo | redibujar | echo "hay una nueva ventana"
Como 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)