Vim 如何以编程方式执行';彩色支持保存';指挥部?
我想做什么: 给定:我正在使用该插件使我的“gui”配色方案在终端中工作 和:colorsupport.vim有一个命令“”,让我保存“转换的”配色方案 然后:启动时,我想使用“转换”的配色方案(如果存在),否则创建它 我会想,在检查“ColorSupport”存在而转换的colorscheme不存在之后,我可以Vim 如何以编程方式执行';彩色支持保存';指挥部?,vim,Vim,我想做什么: 给定:我正在使用该插件使我的“gui”配色方案在终端中工作 和:colorsupport.vim有一个命令“”,让我保存“转换的”配色方案 然后:启动时,我想使用“转换”的配色方案(如果存在),否则创建它 我会想,在检查“ColorSupport”存在而转换的colorscheme不存在之后,我可以 execute 'colorscheme benjamin' " then either execute 'ColorSchemeSave benj
execute 'colorscheme benjamin'
" then either
execute 'ColorSchemeSave benjamin-colorsupport'
" or lower-level
call s:colorscheme_save("benjamin-colorsupport")
但是对于前者,我得到了492:不是一个编辑器命令:ColorSchemeSave benjamin colorsupport
使用后者,我得到E117:未知函数:19\u colorscheme\u save
显然,我不明白这些函数/命令与我正在成功编写脚本的其他函数/命令有何不同。(我是新手。我读过文档和其他问题,但还没有完全弄明白)
下面简要介绍如何定义colorsupport.vim函数和命令
function! s:colorscheme_save(...)
" snip
endfunction
command! -nargs=? ColorSchemeSave :call s:colorscheme_save(<f-args>)
从回答中选出的答案:
参考文献:
~/.vimrc
之后,因此您不能调用插件中定义的函数和命令,因为它们根本不存在。这条规则的唯一例外是自动加载函数,但这与此无关
如果未在~/.vimrc
或另一个由~/.vimrc
显式来源的文件中直接定义:Command
或function()
,则无法调用它们
此外,s:colorscheme\u save()
中的s:
前缀告诉您函数的作用域是其脚本,因此不能从另一个脚本调用
你应该怎么做
foobar\u term.vim
~/.vimrc
:
if has("gui_running")
colorscheme foobar
else
colorscheme foobar_term
endif
因此,您的意思是,当插件允许您使用
let g:somefoo=1
配置它们时,插件实际上取决于在vimrc中设置这些值后加载的行为。但是为什么if exists(“##ColorScheme”)
返回true呢?g:somefoo
只是一个完全被动的变量,留在全局范围内,供任何相关方在将来使用或不使用<代码>存在(“##ColorScheme”)检查Vim是否支持ColorScheme
事件,因为它是内置的,与任何插件、ColorScheme或源代码顺序无关。那张支票总是返回1,所以它基本上是无用的。这是多么难以置信的浪费时间。对我还是你?谢谢你的帮助!好吧,如果我只关心具体的功能是什么,是的,但通常我只是想在vim方面做得更好。
function! g:LoadPluginScript ()
" ColorSupport {{{
if exists(":ColorSchemeSave")
" stuff
endif
" }}}
endfunction
augroup plugin_initialize
autocmd!
autocmd VimEnter * call LoadPluginScript()
augroup
if has("gui_running")
colorscheme foobar
else
colorscheme foobar_term
endif