代码之家  ›  专栏  ›  技术社区  ›  jpoppe

调用自定义vim(python)函数后如何向vim状态行发送状态

  •  2
  • jpoppe  · 技术社区  · 15 年前

    我刚刚创建了我的第一个vim脚本,它是用python编写的。这是一个从目录(/vim/etc/color s)切换配色方案的简单脚本。我想知道如何在用所选配色方案的名称更改配色方案后将通知发送到vim“statusline”。

    森回答了我的问题,这里有一个更新(和调试)版本的脚本谁感兴趣(工作良好,只要我可以测试)

    实施了人工智能和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 回复  |  直到 15 年前
        1
  •  5
  •   Randy Morris    15 年前

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

    :help echo :

    稍后重新绘制可能会使消息再次消失。 因为Vim通常会推迟重新绘制直到 完成了一系列的命令 经常。为了避免这一点,命令来自 “:echo”导致随后重新绘制(重新绘制通常是 延迟到您键入内容),强制重新绘制 使用:redraw命令。例子:

    :new redraw echo“有一个新窗口”

        2
  •  1
  •   Caleb Hattingh    15 年前

    既然你在这里更新脚本,

    而不是

    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)