【问题标题】:In my .vimrc, how can I check for the existence of a color scheme?在我的 .vimrc 中,如何检查配色方案是否存在?
【发布时间】:2011-08-07 14:00:56
【问题描述】:

.vimrc 中,是否可以仅在配色方案存在时才加载它?

【问题讨论】:

    标签: vim color-scheme


    【解决方案1】:

    您可以使用filereadable 函数来检查颜色方案(例如schemename)是否存在:在~/vimfiles/colors 下检查一次(Win32,Unix 使用~/.vim/colors/)和$VIMRUNTIME/colors/ 下检查一次:

    if filereadable("/path/to/schemename.vim")
      colo schemename
    endif
    

    【讨论】:

      【解决方案2】:

      @eckes 答案的替代方法是尝试加载颜色方案并在错误不存在时处理错误:

      try
          colorscheme mayormaynotexist
      catch /^Vim\%((\a\+)\)\=:E185/
          " deal with it
      endtry
      

      【讨论】:

      • 谢谢。我不知道你可以在 .vimrc 中执行 try-catch
      • 你能解释一下catch正则表达式的语法含义吗?我不明白为什么不只是/^E185:/
      • 我只是使用了:help catch 中的示例,因为我认为这将是确切的错误格式。
      【解决方案3】:

      try-catch 中使用:colorscheme 作为Randy has done 可能就足够了,如果您只想加载它(如果存在)并执行其他操作。如果您对 else 部分不感兴趣,一个简单的:silent! colorscheme 就足够了。

      否则,globpath() 是要走的路。然后,如果您真的愿意,可以检查使用 filereadable() 返回的每个路径。

      " {rtp}/autoload/has.vim
      function! has#colorscheme(name) abort
          let pat = 'colors/'.a:name.'.vim'
          return !empty(globpath(&rtp, pat))
      endfunction
      
      " .vimrc
      if has#colorscheme('desert')
           ...
      

      编辑:filereadable($HOME.'/.vim/colors/'.name.'.vim') 可能看起来很简单,而且绝对有吸引力,但如果我们正在寻找的配色方案在其他地方,这还不够。通常,如果它已通过插件管理器安装在另一个目录中。在这种情况下,唯一可靠的方法是签入 vim 'runtimepath'(又名'rtp')。因此globpath()。请注意,:colorscheme name 命令在 {rtp}/colors/{name}.vim 中搜索。

      【讨论】:

      • :silent! colorscheme foo 非常适合我的需要,谢谢。
      • 变量赋值部分使用let。否则,我会收到 pat 不是 vim 命令的错误消息。
      • @jdhao。的确,你是对的。我想知道它怎么会保持这种状态这么久......谢谢
      【解决方案4】:

      我的方法类似,

      if filereadable( expand("$HOME/.vim/colors/railscast.vim") )
          colorscheme railscast
      endif
      

      这比硬编码整个路径要强大一些。

      【讨论】:

        【解决方案5】:

        通常,如果我的最爱不可用,我会使用最喜欢的 colorscheme 和备用。嵌套的try 将使这项工作:

        try 
          colorscheme solarized
          catch
          try 
            colorscheme peachpuff
            catch
          endtry
        endtry
        

        如果colorscheme 都不可用,则加载默认的(无论您的系统上发生了什么)。如果其中一种或两种颜色方案不可用,则不会显示错误。把你喜欢的colorscheme放在第一位。

        此外,不带参数的catch 会捕获任何错误。如果您要处理提供不同错误消息的不同语言环境,这会很方便。

        【讨论】:

          【解决方案6】:

          这是我的 .vimrc 文件中的 wat。

          if filereadable( expand("$HOME/.vim/colors/sublimemonokai.vim") )
              colorscheme sublimemonokai "https://github.com/ErichDonGubler/vim-sublime-monokai
          
              " vim-sublime-monokai only support 256 colours in terminal. If you are using a terminal which support truecolor like iterm2, enable the GUI color
              set termguicolors
          
              " Otherwise, use below setting to activate the 256 color in terminal
              set t_Co=256
          else
              echom "The sublimemonokai.vim were not found to be used as colorscheme. elflord will be set for the timebeing..."
              colorscheme elflord
          endif
          

          基本上它会检查我喜欢的配色方案是否存在于机器上。如果是这样,它将选择它并应用它所需的所有设置。否则,它会选择 vim 附带的合适的配色方案。

          通过查看其他答案,我的答案与@user427390 答案共享位部分,并且它具有额外的 else 条件。

          以下链接在编写我自己的 .vimrc 和 vim 相关文件的脚本方面帮助了我很多: http://learnvimscriptthehardway.stevelosh.com/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-30
            • 1970-01-01
            • 2011-05-05
            • 1970-01-01
            • 1970-01-01
            • 2011-11-26
            • 2014-04-11
            • 1970-01-01
            相关资源
            最近更新 更多