如何以编程方式执行' ColorSupportSave'命令?

时间:2014-11-04 15:34:05

标签: vim

我想做什么:

鉴于:我正在使用colorsupport.vim插件制作我的“gui' colorscheme在终端工作。

:colorsupport.vim有一个命令' ColorSupportSave'那让我拯救了被转换的'色彩方案。

然后:在启动时,我想使用转换后的' colorscheme如果存在,否则创建它

我想,在检查了ColorSupport'之后存在,转换后的colorscheme没有,我可以

      execute 'colorscheme benjamin'
      " then either
      execute 'ColorSchemeSave benjamin-colorsupport'
      " or lower-level
      call s:colorscheme_save("benjamin-colorsupport")

但是前者我得492: Not an editor command: ColorSchemeSave benjamin-colorsupport 后者我得E117: Unknown function: <SNR>19_colorscheme_save

显然,我不明白这些功能/命令与我成功编写脚本的其他功能/命令有何不同。 (我是这里的新人。我已经阅读了文档和其他问题,但还没有完全弄清楚)

以下是 colorsupport.vim功能和命令的定义,简要说明

function! s:colorscheme_save(...)
" snip
endfunction
command! -nargs=? ColorSchemeSave :call s:colorscheme_save(<f-args>)

以下是更多背景信息vimrc 的相关部分

set nocompatible               " be iMproved
filetype off                   " required!

set runtimepath+=~/.vim/bundle/vundle/
call vundle#begin()

Plugin 'gmarik/vundle'
Plugin 'vim-scripts/colorsupport.vim'
call vundle#end()            " required
filetype plugin indent on    " required
if has("gui_running")
  " stuff
else
  if &term != 'cygwin'
    silent !echo "setting 256 color term"
    set t_Co=256
  endif
  let mycolorscheme = 'benjamin'
  " wrap color scheme in gui->term plugins
  if exists('##ColorScheme')
     if filereadable(expand("$HOME/.vim/colors/".mycolorscheme."-colorsupport.vim")) ||
            \    filereadable(expand("$HOME/vimfiles/colors/".mycolorscheme."- colorsupport.vim"))
      silent !echo "using colorsupport.vim with ".mycolorscheme."-colorsupport"
      execute 'colorscheme '.mycolorscheme.'-colorsupport'
    else
      silent !echo "using colorsupport.vim with ".mycolorscheme
      execute 'colorscheme '.mycolorscheme
      " can't figure out how to get this working in the script
      " silent !echo "using colorsupport.vim with ".mycolorscheme."-colorsupport"
      " execute 'ColorSchemeSave '.mycolorscheme.'-colorsupport'
      " or lower-level
      " call s:colorscheme_save("'.mycolorscheme.'-colorsupport")
    endif
   endif
endif

答案从答复中挑选出来:

参考:

  

vimrc在插件之前加载。

     

如果你看一下:h初始化你会发现第3步是加载   vimrc和第4步是加载插件。

     

通过查看,你也可以看到vimrc在插件之前被加载了   输出:scriptnames。 scriptnames列出了所有源脚本   命令他们来源,vimrc是第一个采购的东西。 (拿一个   看看:h:scriptnames)。

     

所以创建文件.vim / after / plugin / colorsupport.vim

  

利用autocmd也可以实现相同的目标   事件VimEnter。因为Event VimEnter是在所有其他之后执行的   启动的东西,用这个autocmd调用的命令将在之后发生   加载所有插件。程序如下:

     

首先创建一个包含所有插件特定脚本的函数   它。

function! g:LoadPluginScript ()
    " ColorSupport {{{
    if exists(":ColorSchemeSave")
      " stuff
    endif
    " }}}
endfunction

augroup plugin_initialize
    autocmd!
    autocmd VimEnter * call LoadPluginScript()
augroup

1 个答案:

答案 0 :(得分:1)

为什么您的尝试不能并且无法正常工作

插件 ~/.vimrc后来源,因此您无法调用插件中定义的函数和命令,因为它们还不存在。此规则的唯一例外是自动加载功能,但这里无关紧要。

如果:Commandfunction()或您~/.vimrc明确提供的其他文件中未直接定义~/.vimrcs:,则无法致电s:colorscheme_save()foobar_term.vim

此外,~/.vimrc中的if has("gui_running") colorscheme foobar else colorscheme foobar_term endif 前缀告诉您该函数的作用域为其脚本,因此无法从另一个脚本调用。

你应该做什么

  1. 将与终端兼容的colorscheme写入具有明确名称的磁盘,例如{{1}}。

  2. 将此小条件添加到{{1}}:

    {{1}}