我想做什么:
鉴于:我正在使用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
答案 0 :(得分:1)
插件在 ~/.vimrc
后来源,因此您无法调用插件中定义的函数和命令,因为它们还不存在。此规则的唯一例外是自动加载功能,但这里无关紧要。
如果:Command
或function()
或您~/.vimrc
明确提供的其他文件中未直接定义~/.vimrc
或s:
,则无法致电s:colorscheme_save()
或foobar_term.vim
。
此外,~/.vimrc
中的if has("gui_running")
colorscheme foobar
else
colorscheme foobar_term
endif
前缀告诉您该函数的作用域为其脚本,因此无法从另一个脚本调用。
将与终端兼容的colorscheme写入具有明确名称的磁盘,例如{{1}}。
将此小条件添加到{{1}}:
{{1}}