Как отправить статус в строку состояния VIM после вызова пользовательской функции VIM (Python) - PullRequest
2 голосов
/ 01 декабря 2009

Я только что создал свой первый скрипт VIM, я написал его на Python. Это простой скрипт для переключения цветовых схем из каталога (/ vim / etc / colors). Я хотел бы знать, как отправить уведомление после изменения цветовой схемы с именем выбранной цветовой схемы в vim 'statusline'.

rson дал ответ на мой вопрос, вот обновленная (и отлаженная) версия скрипта для тех, кто заинтересован (работает, насколько я могу проверить)

Реализовал (вроде) предложения AI и Caleb, спасибо!:

" 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

Ответы [ 2 ]

5 голосов
/ 01 декабря 2009

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

С :help echo:

Более поздняя перерисовка может заставить сообщение снова исчезнуть. А поскольку Вим в основном откладывает перерисовку до закончил с последовательностью команд это происходит довольно часто. Чтобы избежать этого команда до ": echo" впоследствии вызывает перерисовку (перерисовки часто откладывается, пока не наберете что-нибудь), принудительно перерисовать с |: перерисовать | команда. Пример:

: новый | перерисовать | эхо "есть новое окно"

1 голос
/ 01 декабря 2009

Поскольку вы обновляете скрипт здесь,

Вместо

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

Возможно

scroll['next'] = +1
scroll['prev'] = -1
position += scroll[argument]
position = position % len(colorschemes) 
...