Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 如何以编程方式执行';彩色支持保存';指挥部?_Vim - Fatal编程技术网

Vim 如何以编程方式执行';彩色支持保存';指挥部?

Vim 如何以编程方式执行';彩色支持保存';指挥部?,vim,Vim,我想做什么: 给定:我正在使用该插件使我的“gui”配色方案在终端中工作 和:colorsupport.vim有一个命令“”,让我保存“转换的”配色方案 然后:启动时,我想使用“转换”的配色方案(如果存在),否则创建它 我会想,在检查“ColorSupport”存在而转换的colorscheme不存在之后,我可以 execute 'colorscheme benjamin' " then either execute 'ColorSchemeSave benj

我想做什么:

给定:我正在使用该插件使我的“gui”配色方案在终端中工作

:colorsupport.vim有一个命令“”,让我保存“转换的”配色方案

然后:启动时,我想使用“转换”的配色方案(如果存在),否则创建它

我会想,在检查“ColorSupport”存在而转换的colorscheme不存在之后,我可以

      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在插件之前加载

如果查看:h初始化,您将发现步骤3是加载 vimrc和步骤4是加载插件

通过查看 输出:脚本名。scriptnames列出列表中的所有源脚本 他们的采购订单和vimrc是第一件采购的东西。(举个例子 请看:h:scriptnames)

因此,创建文件.vim/after/plugin/colorsupport.vim

也可以使用autocmd实现相同的目标 事件vicenter。因为事件VimCenter是在所有其他事件之后执行的 启动时,使用此autocmd调用的命令将在 加载所有插件。程序如下:

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

为什么你的尝试不起作用 插件来源于
~/.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