mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 06:30:03 +08:00
301 lines
8.9 KiB
VimL
Vendored
301 lines
8.9 KiB
VimL
Vendored
"=============================================================================
|
|
" FILE: init.vim
|
|
" AUTHOR: Shougo Matsushita <Shougo.Matsu at gmail.com>
|
|
" Copyright (C) 2010 http://github.com/gmarik
|
|
" License: MIT license {{{
|
|
" Permission is hereby granted, free of charge, to any person obtaining
|
|
" a copy of this software and associated documentation files (the
|
|
" "Software"), to deal in the Software without restriction, including
|
|
" without limitation the rights to use, copy, modify, merge, publish,
|
|
" distribute, sublicense, and/or sell copies of the Software, and to
|
|
" permit persons to whom the Software is furnished to do so, subject to
|
|
" the following conditions:
|
|
"
|
|
" The above copyright notice and this permission notice shall be included
|
|
" in all copies or substantial portions of the Software.
|
|
"
|
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
" }}}
|
|
"=============================================================================
|
|
|
|
let s:save_cpo = &cpo
|
|
set cpo&vim
|
|
|
|
function! neobundle#init#_rc(path) abort "{{{
|
|
let path =
|
|
\ neobundle#util#substitute_path_separator(
|
|
\ neobundle#util#expand(a:path))
|
|
if path =~ '/$'
|
|
let path = path[: -2]
|
|
endif
|
|
|
|
if path == ''
|
|
call neobundle#util#print_error(
|
|
\ 'neobundle#rc() argument is empty.')
|
|
return
|
|
endif
|
|
|
|
call neobundle#set_neobundle_dir(path)
|
|
|
|
" Join to the tail in runtimepath.
|
|
let rtp = neobundle#get_rtp_dir()
|
|
execute 'set rtp-='.fnameescape(rtp)
|
|
let rtps = neobundle#util#split_rtp(&runtimepath)
|
|
let n = index(rtps, $VIMRUNTIME)
|
|
if n < 0
|
|
call neobundle#util#print_error(
|
|
\ 'Invalid runtimepath is detected.')
|
|
call neobundle#util#print_error(
|
|
\ 'Please check your .vimrc.')
|
|
return
|
|
endif
|
|
let &runtimepath = neobundle#util#join_rtp(
|
|
\ insert(rtps, rtp, n-1), &runtimepath, rtp)
|
|
|
|
augroup neobundle
|
|
autocmd!
|
|
augroup END
|
|
|
|
call neobundle#config#init()
|
|
call neobundle#autoload#init()
|
|
endfunction"}}}
|
|
|
|
function! neobundle#init#_bundle(bundle) abort "{{{
|
|
if (!has_key(a:bundle, 'type') && get(a:bundle, 'local', 0))
|
|
\ || get(a:bundle, 'type', '') ==# 'nosync'
|
|
" Default type.
|
|
let a:bundle.type = 'none'
|
|
endif
|
|
if !has_key(a:bundle, 'type')
|
|
call neobundle#installer#error(
|
|
\ printf('Failed parse name "%s" and args %s',
|
|
\ a:bundle.orig_name, string(a:bundle.orig_opts)))
|
|
return {}
|
|
endif
|
|
|
|
let bundle = {
|
|
\ 'uri' : '',
|
|
\ 'script_type' : '',
|
|
\ 'rev' : '',
|
|
\ 'rtp' : '',
|
|
\ 'depends' : [],
|
|
\ 'fetch' : 0,
|
|
\ 'force' : 0,
|
|
\ 'gui' : 0,
|
|
\ 'terminal' : 0,
|
|
\ 'autoload' : {},
|
|
\ 'hooks' : {},
|
|
\ 'external_commands' : {},
|
|
\ 'build_commands': {},
|
|
\ 'description' : '',
|
|
\ 'dummy_commands' : [],
|
|
\ 'dummy_mappings' : [],
|
|
\ 'sourced' : 0,
|
|
\ 'disabled' : 0,
|
|
\ 'local' : 0,
|
|
\ 'focus' : 0,
|
|
\ 'verbose' : 0,
|
|
\ 'orig_name' : '',
|
|
\ 'vim_version' : '',
|
|
\ 'orig_opts' : {},
|
|
\ 'base' : neobundle#get_neobundle_dir(),
|
|
\ 'install_rev' : '',
|
|
\ 'install_process_timeout'
|
|
\ : g:neobundle#install_process_timeout,
|
|
\ 'refcnt' : 1,
|
|
\ 'frozen' : 0,
|
|
\ 'on_i' : 0,
|
|
\ 'on_ft' : [],
|
|
\ 'on_cmd' : [],
|
|
\ 'on_func' : [],
|
|
\ 'on_map' : [],
|
|
\ 'on_path' : [],
|
|
\ 'on_source' : [],
|
|
\ 'pre_cmd' : [],
|
|
\ 'pre_func' : [],
|
|
\ }
|
|
call extend(bundle, a:bundle)
|
|
|
|
if !has_key(bundle, 'name')
|
|
let bundle.name = neobundle#util#name_conversion(bundle.orig_name)
|
|
endif
|
|
|
|
if !has_key(bundle, 'normalized_name')
|
|
let bundle.normalized_name = substitute(
|
|
\ fnamemodify(bundle.name, ':r'),
|
|
\ '\c^vim[_-]\|[_-]vim$', '', 'g')
|
|
endif
|
|
if !has_key(bundle.orig_opts, 'name') &&
|
|
\ g:neobundle#enable_name_conversion
|
|
" Use normalized name.
|
|
let bundle.name = bundle.normalized_name
|
|
endif
|
|
|
|
if !has_key(bundle, 'directory')
|
|
let bundle.directory = bundle.name
|
|
|
|
if bundle.rev != ''
|
|
let bundle.directory .= '_' . substitute(bundle.rev,
|
|
\ '[^[:alnum:]_-]', '_', 'g')
|
|
endif
|
|
endif
|
|
|
|
if bundle.base[0] == '~'
|
|
let bundle.base = neobundle#util#expand(bundle.base)
|
|
endif
|
|
if bundle.base[-1] == '/' || bundle.base[-1] == '\'
|
|
" Chomp.
|
|
let bundle.base = bundle.base[: -2]
|
|
endif
|
|
|
|
let bundle.path = isdirectory(bundle.uri) ?
|
|
\ bundle.uri : bundle.base.'/'.bundle.directory
|
|
|
|
" Check relative path.
|
|
if bundle.rtp !~ '^\%([~/]\|\a\+:\)'
|
|
let bundle.rtp = bundle.path.'/'.bundle.rtp
|
|
endif
|
|
if bundle.rtp[0] == '~'
|
|
let bundle.rtp = neobundle#util#expand(bundle.rtp)
|
|
endif
|
|
if bundle.rtp[-1] == '/' || bundle.rtp[-1] == '\'
|
|
" Chomp.
|
|
let bundle.rtp = bundle.rtp[: -2]
|
|
endif
|
|
if bundle.normalized_name ==# 'neobundle' || bundle.fetch
|
|
" Do not add runtimepath.
|
|
let bundle.rtp = ''
|
|
endif
|
|
|
|
if bundle.script_type != ''
|
|
" Add script_type.
|
|
" Note: To check by neobundle#config#is_installed().
|
|
let bundle.path .= '/' . bundle.script_type
|
|
endif
|
|
|
|
if !has_key(bundle, 'augroup')
|
|
let bundle.augroup = bundle.normalized_name
|
|
endif
|
|
|
|
" Convert old name
|
|
if has_key(bundle, 'stay_same')
|
|
let bundle.frozen = bundle.stay_same
|
|
endif
|
|
call s:init_lazy(bundle)
|
|
|
|
" Parse depends.
|
|
if !empty(bundle.depends)
|
|
call s:init_depends(bundle)
|
|
endif
|
|
|
|
if type(bundle.disabled) == type('')
|
|
let bundle.disabled = eval(bundle.disabled)
|
|
endif
|
|
|
|
let bundle.disabled = bundle.disabled
|
|
\ || (bundle.gui && !has('gui_running'))
|
|
\ || (bundle.terminal && has('gui_running'))
|
|
\ || (bundle.vim_version != ''
|
|
\ && s:check_version(bundle.vim_version))
|
|
\ || (!empty(bundle.external_commands)
|
|
\ && neobundle#config#check_commands(bundle.external_commands))
|
|
|
|
return bundle
|
|
endfunction"}}}
|
|
|
|
function! s:init_lazy(bundle) abort "{{{
|
|
let bundle = a:bundle
|
|
|
|
" Auto set autoload keys.
|
|
for key in filter([
|
|
\ 'filetypes', 'filename_patterns',
|
|
\ 'commands', 'functions', 'mappings',
|
|
\ 'insert', 'explorer',
|
|
\ 'command_prefix', 'function_prefixes',
|
|
\ ], 'has_key(bundle, v:val)')
|
|
let bundle.autoload[key] = bundle[key]
|
|
call remove(bundle, key)
|
|
endfor
|
|
|
|
" Auto set on keys.
|
|
for [key, value] in items(filter({
|
|
\ 'filetypes' : 'on_ft',
|
|
\ 'filename_patterns' : 'on_path',
|
|
\ 'commands' : 'on_cmd',
|
|
\ 'functions' : 'on_func',
|
|
\ 'mappings' : 'on_map',
|
|
\ 'insert' : 'on_i',
|
|
\ 'explorer' : 'on_path',
|
|
\ 'on_source' : 'on_source',
|
|
\ 'command_prefix' : 'pre_cmd',
|
|
\ 'function_prefixes' : 'pre_func',
|
|
\ }, 'has_key(bundle.autoload, v:key)'))
|
|
|
|
let bundle[value] = (key ==# 'explorer'
|
|
\ && type(bundle.autoload[key]) == type(0)
|
|
\ && bundle.autoload[key] == 1) ? '.*' : bundle.autoload[key]
|
|
endfor
|
|
|
|
if empty(bundle.pre_cmd)
|
|
let bundle.pre_cmd = substitute(bundle.normalized_name, '[_-]', '', 'g')
|
|
endif
|
|
|
|
" Auto convert2list.
|
|
for key in filter([
|
|
\ 'on_ft', 'on_path', 'on_cmd',
|
|
\ 'on_func', 'on_map',
|
|
\ 'on_source', 'pre_cmd', 'pre_func',
|
|
\ ], "type(bundle[v:val]) != type([])
|
|
\")
|
|
let bundle[key] = [bundle[key]]
|
|
endfor
|
|
|
|
if !has_key(bundle, 'lazy')
|
|
" Set lazy flag automatically
|
|
let bundle.lazy = bundle.on_i
|
|
\ || !empty(filter(['on_ft', 'on_path', 'on_cmd',
|
|
\ 'on_func', 'on_map', 'on_source'],
|
|
\ '!empty(bundle[v:val])'))
|
|
endif
|
|
endfunction"}}}
|
|
|
|
function! s:init_depends(bundle) abort "{{{
|
|
let bundle = a:bundle
|
|
let _ = []
|
|
|
|
for depend in neobundle#util#convert2list(bundle.depends)
|
|
if type(depend) == type('')
|
|
let depend = string(depend)
|
|
endif
|
|
|
|
let depend_bundle = type(depend) == type({}) ?
|
|
\ depend : neobundle#parser#bundle(depend, 1)
|
|
let depend_bundle.lazy = bundle.lazy
|
|
call add(_, depend_bundle)
|
|
|
|
unlet depend
|
|
endfor
|
|
|
|
let bundle.depends = _
|
|
endfunction"}}}
|
|
|
|
function! s:check_version(min_version) abort "{{{
|
|
let versions = split(a:min_version, '\.')
|
|
let major = get(versions, 0, 0)
|
|
let minor = get(versions, 1, 0)
|
|
let patch = get(versions, 2, 0)
|
|
let min_version = major * 100 + minor
|
|
return v:version < min_version ||
|
|
\ (patch != 0 && v:version == min_version && !has('patch'.patch))
|
|
endfunction"}}}
|
|
|
|
let &cpo = s:save_cpo
|
|
unlet s:save_cpo
|
|
|