Vim,在提示之前显示当前的配色方案

3

我找到了一个帖子,其中有人询问如何显示当前的colorscheme。我想将此与提示符组合在一起。也就是说,分别使用:colorscheme>CR>:colorscheme <C-z><S-Tab>可以分别显示和提示colorscheme。我不确定如何将它们组合成一个命令。以下是我的尝试,

nnoremap <leader>c :echo g:colors_name \n<CR>
function! Colors()
    :colorscheme<cr>
    :colorscheme <C-z><S-Tab>
endfunction
nnoremap <leader>c :exec Colors()
nnoremap <leader>c :colorscheme<cr>:colorscheme <C-z><S-Tab>
nnoremap <leader>c :echo g:colors_name<cr><bar>:colorscheme <C-z><S-Tab>

分开来看,这两个都可以工作:

nnoremap <leader>s :colorscheme<CR>
nnoremap <leader>c :colorscheme <C-z><S-Tab>

顺便提一下,我使用的是set wildcharm=<C-z>set wildmenu wildmode=list:full


<C-z><S-Tab> 应该做什么? - merlin2011
@merlin2011,简单来说,它会启动wildmenu/wildmodewildcharm<C-z>分配给<Tab>以便在宏中使用。因此,<C-z>会显示制表符完成选项,但也会在命令行中输入制表符完成列表中的第一项。然后,<S-Tab>可以将其反转,使制表符完成列表仍然出现,但您可以从上次停止的位置开始输入以限制完成候选项。 - Brady Trainor
@merlin2011 哦,我刚意识到,Tab 键的行为可能会受到 wildmenuwildmode 的影响(以逗号分隔列表形式表示 wildmode 中有几个项目)。我会添加它们。 - Brady Trainor
很容易使用,c<RET>来查看颜色方案。现在我有类似于,aAirlineTheme - Brady Trainor
1个回答

2

我不确定您是否可以将它们合并成一个命令。我编写了一个函数来查找所有的颜色方案,打印当前的方案,并提示您选择一个列表。当前的颜色方案名称包含在g:colors_name中。

function! PromptList(prompt, list)
    let l:copy = copy(a:list)
    for i in range(len(l:copy))
        let l:copy[i] = (i + 1) . '. ' . l:copy[i]
    endfor
    let l:ret = inputlist([a:prompt] + l:copy)
    if l:ret > 0 && l:ret < len(a:list)
        return a:list[l:ret - 1]
    else
        return ''
    endif
endfunction

function! ChangeColorscheme()
    " Get a sorted list with the available color schemes.
    let l:list = sort(map(
                \ split(globpath(&runtimepath, 'colors/*.vim'), '\n'),
                \ 'fnamemodify(v:val, ":t:r")'))

    let l:prompt = 'Current color scheme is ' . g:colors_name
    let l:color = PromptList(l:prompt, l:list)
    if l:color != ''
        exec 'colorscheme' l:color
    endif
endfunction

要使用它,请输入:call ChangeColorscheme()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接