mirror of
https://github.com/junegunn/vim-plug.git
synced 2025-12-08 09:54:45 +08:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3606c294de | ||
|
|
06f903d8af | ||
|
|
1f704deb76 | ||
|
|
3ebf6361bf | ||
|
|
9b99c1f885 | ||
|
|
53cc8a53d9 | ||
|
|
2ee153d610 | ||
|
|
7019171737 | ||
|
|
044c3a67c4 | ||
|
|
48514768c2 | ||
|
|
68ad02c5c3 | ||
|
|
12bc2ea1da | ||
|
|
ade7fb95b1 | ||
|
|
9c55223869 | ||
|
|
495becf442 | ||
|
|
425ef39db2 | ||
|
|
bd2cb9d2de | ||
|
|
0263370bd1 | ||
|
|
4b3fbd1592 |
22
README.md
22
README.md
@@ -1,9 +1,9 @@
|
||||

|
||||
<img src="https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.png" height="56" alt="vim-plug">
|
||||
[](https://travis-ci.org/junegunn/vim-plug)
|
||||
|
||||
A minimalist Vim plugin manager.
|
||||
|
||||

|
||||
<img src="https://raw.githubusercontent.com/junegunn/i/master/vim-plug/installer.gif" height="450">
|
||||
|
||||
### Pros.
|
||||
|
||||
@@ -74,15 +74,15 @@ Reload .vimrc and `:PlugInstall` to install plugins.
|
||||
|
||||
### `Plug` options
|
||||
|
||||
| Option | Description |
|
||||
| -------------- | -------------------------------------------------------------------- |
|
||||
| `branch`/`tag` | Branch or tag of the repository to use |
|
||||
| `rtp` | Subdirectory that contains Vim plugin |
|
||||
| `dir` | Custom directory for the plugin |
|
||||
| `do` | Post-update hook (string or funcref) |
|
||||
| `on` | On-demand loading: Commands or `<Plug>`-mappings |
|
||||
| `for` | On-demand loading: File types |
|
||||
| `frozen` | Do not install/update plugin unless explicitly given as the argument |
|
||||
| Option | Description |
|
||||
| -------------- | ------------------------------------------------ |
|
||||
| `branch`/`tag` | Branch or tag of the repository to use |
|
||||
| `rtp` | Subdirectory that contains Vim plugin |
|
||||
| `dir` | Custom directory for the plugin |
|
||||
| `do` | Post-update hook (string or funcref) |
|
||||
| `on` | On-demand loading: Commands or `<Plug>`-mappings |
|
||||
| `for` | On-demand loading: File types |
|
||||
| `frozen` | Do not update unless explicitly specified |
|
||||
|
||||
### Global options
|
||||
|
||||
|
||||
101
plug.vim
101
plug.vim
@@ -83,6 +83,7 @@ let s:TYPE = {
|
||||
\ 'funcref': type(function('call'))
|
||||
\ }
|
||||
let s:loaded = get(s:, 'loaded', {})
|
||||
let s:triggers = get(s:, 'triggers', {})
|
||||
|
||||
function! plug#begin(...)
|
||||
if a:0 > 0
|
||||
@@ -99,6 +100,7 @@ function! plug#begin(...)
|
||||
let g:plug_home = home
|
||||
let g:plugs = {}
|
||||
let g:plugs_order = []
|
||||
let s:triggers = {}
|
||||
|
||||
call s:define_commands()
|
||||
return 1
|
||||
@@ -122,6 +124,10 @@ function! s:to_a(v)
|
||||
return type(a:v) == s:TYPE.list ? a:v : [a:v]
|
||||
endfunction
|
||||
|
||||
function! s:to_s(v)
|
||||
return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n"
|
||||
endfunction
|
||||
|
||||
function! s:source(from, ...)
|
||||
for pattern in a:000
|
||||
for vim in s:lines(globpath(a:from, pattern))
|
||||
@@ -152,6 +158,7 @@ function! plug#end()
|
||||
endif
|
||||
|
||||
if has_key(plug, 'on')
|
||||
let s:triggers[name] = { 'map': [], 'cmd': [] }
|
||||
for cmd in s:to_a(plug.on)
|
||||
if cmd =~ '^<Plug>.\+'
|
||||
if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i'))
|
||||
@@ -162,10 +169,14 @@ function! plug#end()
|
||||
\ mode, cmd, map_prefix, string(cmd), string(name), key_prefix)
|
||||
endfor
|
||||
endif
|
||||
elseif !exists(':'.cmd)
|
||||
execute printf(
|
||||
\ 'command! -nargs=* -range -bang %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)',
|
||||
\ cmd, string(cmd), string(name))
|
||||
call add(s:triggers[name].map, cmd)
|
||||
elseif cmd =~ '^[A-Z]'
|
||||
if exists(':'.cmd) != 2
|
||||
execute printf(
|
||||
\ 'command! -nargs=* -range -bang %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)',
|
||||
\ cmd, string(cmd), string(name))
|
||||
endif
|
||||
call add(s:triggers[name].cmd, cmd)
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
@@ -289,9 +300,10 @@ function! s:reorg_rtp()
|
||||
let s:middle = get(s:, 'middle', &rtp)
|
||||
let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])')
|
||||
let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), 'isdirectory(v:val)')
|
||||
let &rtp = join(map(rtps, 's:escrtp(v:val)'), ',')
|
||||
\ . substitute(','.s:middle.',', '^,,$', ',', '')
|
||||
let rtp = join(map(rtps, 's:escrtp(v:val)'), ',')
|
||||
\ . ','.s:middle.','
|
||||
\ . join(map(afters, 's:escrtp(v:val)'), ',')
|
||||
let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g')
|
||||
let s:prtp = &rtp
|
||||
|
||||
if !empty(s:first_rtp)
|
||||
@@ -315,12 +327,27 @@ function! plug#load(...)
|
||||
for name in a:000
|
||||
call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
|
||||
endfor
|
||||
silent! doautocmd BufRead
|
||||
doautocmd BufRead
|
||||
return 1
|
||||
endfunction
|
||||
|
||||
function! s:remove_triggers(name)
|
||||
if !has_key(s:triggers, a:name)
|
||||
return
|
||||
endif
|
||||
for cmd in s:triggers[a:name].cmd
|
||||
execute 'delc' cmd
|
||||
endfor
|
||||
for map in s:triggers[a:name].map
|
||||
execute 'unmap' map
|
||||
execute 'iunmap' map
|
||||
endfor
|
||||
call remove(s:triggers, a:name)
|
||||
endfunction
|
||||
|
||||
function! s:lod(names, types)
|
||||
for name in a:names
|
||||
call s:remove_triggers(name)
|
||||
let s:loaded[name] = 1
|
||||
endfor
|
||||
call s:reorg_rtp()
|
||||
@@ -336,19 +363,16 @@ endfunction
|
||||
function! s:lod_ft(pat, names)
|
||||
call s:lod(a:names, ['plugin', 'after/plugin'])
|
||||
execute 'autocmd! PlugLOD FileType' a:pat
|
||||
silent! doautocmd filetypeplugin FileType
|
||||
silent! doautocmd filetypeindent FileType
|
||||
doautocmd filetypeplugin FileType
|
||||
doautocmd filetypeindent FileType
|
||||
endfunction
|
||||
|
||||
function! s:lod_cmd(cmd, bang, l1, l2, args, name)
|
||||
execute 'delc' a:cmd
|
||||
call s:lod([a:name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
|
||||
execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
|
||||
endfunction
|
||||
|
||||
function! s:lod_map(map, name, prefix)
|
||||
execute 'unmap' a:map
|
||||
execute 'iunmap' a:map
|
||||
call s:lod([a:name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
|
||||
let extra = ''
|
||||
while 1
|
||||
@@ -613,6 +637,11 @@ function! s:do(pull, force, todo)
|
||||
endfunction
|
||||
|
||||
function! s:finish(pull)
|
||||
let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen'))
|
||||
if new_frozen
|
||||
let s = new_frozen > 1 ? 's' : ''
|
||||
call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s))
|
||||
endif
|
||||
call append(3, '- Finishing ... ')
|
||||
redraw
|
||||
call plug#helptags()
|
||||
@@ -623,7 +652,7 @@ function! s:finish(pull)
|
||||
if !empty(s:update.errors)
|
||||
call add(msgs, "Press 'R' to retry.")
|
||||
endif
|
||||
if a:pull && !empty(filter(getline(5, '$'),
|
||||
if a:pull && len(s:update.new) < len(filter(getline(5, '$'),
|
||||
\ "v:val =~ '^- ' && stridx(v:val, 'Already up-to-date') < 0"))
|
||||
call add(msgs, "Press 'D' to see the updated changes.")
|
||||
endif
|
||||
@@ -652,7 +681,7 @@ function! s:update_impl(pull, force, args) abort
|
||||
\ remove(args, -1) : get(g:, 'plug_threads', 16)
|
||||
|
||||
let managed = filter(copy(g:plugs), 's:is_managed(v:key)')
|
||||
let todo = empty(args) ? filter(managed, '!v:val.frozen') :
|
||||
let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') :
|
||||
\ filter(managed, 'index(args, v:key) >= 0')
|
||||
|
||||
if empty(todo)
|
||||
@@ -666,7 +695,7 @@ function! s:update_impl(pull, force, args) abort
|
||||
try
|
||||
call mkdir(g:plug_home, 'p')
|
||||
catch
|
||||
return s:err(printf('Invalid plug directory: %s.'
|
||||
return s:err(printf('Invalid plug directory: %s. '.
|
||||
\ 'Try to call plug#begin with a valid directory', g:plug_home))
|
||||
endtry
|
||||
endif
|
||||
@@ -742,20 +771,18 @@ function! s:job_abort()
|
||||
call system('rm -rf ' . s:shellesc(g:plugs[name].dir))
|
||||
endif
|
||||
endfor
|
||||
let s:jobs = {}
|
||||
let s:jobs_idx = {}
|
||||
let s:jobs = {}
|
||||
endfunction
|
||||
|
||||
function! s:job_handler() abort
|
||||
function! s:job_handler(name) abort
|
||||
if !s:plug_window_exists() " plug window closed
|
||||
return s:job_abort()
|
||||
endif
|
||||
|
||||
let name = get(s:jobs_idx, v:job_data[0], '')
|
||||
if empty(name) " stale task
|
||||
if !has_key(s:jobs, a:name)
|
||||
return
|
||||
endif
|
||||
let job = s:jobs[name]
|
||||
let job = s:jobs[a:name]
|
||||
|
||||
if v:job_data[1] == 'exit'
|
||||
let job.running = 0
|
||||
@@ -763,14 +790,14 @@ function! s:job_handler() abort
|
||||
let job.error = 1
|
||||
let job.result = substitute(job.result, "Error[\r\n]$", '', '')
|
||||
endif
|
||||
call s:reap(name)
|
||||
call s:reap(a:name)
|
||||
call s:tick()
|
||||
else
|
||||
let job.result .= v:job_data[2]
|
||||
let job.result .= s:to_s(v:job_data[2])
|
||||
" To reduce the number of buffer updates
|
||||
let job.tick = get(job, 'tick', -1) + 1
|
||||
if job.tick % len(s:jobs) == 0
|
||||
call s:log(job.new ? '+' : '*', name, job.result)
|
||||
call s:log(job.new ? '+' : '*', a:name, job.result)
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
@@ -785,10 +812,9 @@ function! s:spawn(name, cmd, opts)
|
||||
\ (has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir) : a:cmd)
|
||||
\ . ' || echo Error'])
|
||||
if x > 0
|
||||
let s:jobs_idx[x] = a:name
|
||||
let job.jobid = x
|
||||
augroup PlugJobControl
|
||||
execute 'autocmd JobActivity' a:name 'call s:job_handler()'
|
||||
execute 'autocmd JobActivity' a:name printf('call s:job_handler(%s)', string(a:name))
|
||||
augroup END
|
||||
else
|
||||
let job.running = 0
|
||||
@@ -859,8 +885,7 @@ function! s:log(bullet, name, lines)
|
||||
endfunction
|
||||
|
||||
function! s:update_vim()
|
||||
let s:jobs = {}
|
||||
let s:jobs_idx = {}
|
||||
let s:jobs = {}
|
||||
|
||||
call s:bar()
|
||||
call s:tick()
|
||||
@@ -1241,7 +1266,7 @@ function! s:clean(force)
|
||||
call append(line('$'), 'Already clean.')
|
||||
else
|
||||
call inputsave()
|
||||
let yes = a:force || (input('Proceed? (Y/N) ') =~? '^y')
|
||||
let yes = a:force || (input('Proceed? (y/N) ') =~? '^y')
|
||||
call inputrestore()
|
||||
if yes
|
||||
for dir in todo
|
||||
@@ -1268,12 +1293,7 @@ function! s:upgrade()
|
||||
throw get(s:lines(output), -1, v:shell_error)
|
||||
endif
|
||||
elseif has('ruby')
|
||||
ruby << EOF
|
||||
require 'open-uri'
|
||||
File.open(VIM::evaluate('new'), 'w') do |f|
|
||||
f << open(VIM::evaluate('s:plug_src')).read
|
||||
end
|
||||
EOF
|
||||
call s:upgrade_using_ruby(new)
|
||||
else
|
||||
return s:err('curl executable or ruby support not found')
|
||||
endif
|
||||
@@ -1294,6 +1314,15 @@ EOF
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:upgrade_using_ruby(new)
|
||||
ruby << EOF
|
||||
require 'open-uri'
|
||||
File.open(VIM::evaluate('a:new'), 'w') do |f|
|
||||
f << open(VIM::evaluate('s:plug_src')).read
|
||||
end
|
||||
EOF
|
||||
endfunction
|
||||
|
||||
function! s:upgrade_specs()
|
||||
for spec in values(g:plugs)
|
||||
let spec.frozen = get(spec, 'frozen', 0)
|
||||
@@ -1454,7 +1483,7 @@ endfunction
|
||||
function! s:revert()
|
||||
let name = s:find_name(line('.'))
|
||||
if empty(name) || !has_key(g:plugs, name) ||
|
||||
\ input(printf('Revert the update of %s? (Y/N) ', name)) !~? '^y'
|
||||
\ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y'
|
||||
return
|
||||
endif
|
||||
|
||||
|
||||
5
test/fixtures/.gitignore
vendored
Normal file
5
test/fixtures/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
fzf*
|
||||
xxx
|
||||
yyy
|
||||
z1
|
||||
z2
|
||||
1
test/fixtures/ftplugin-msg/ftplugin/c.vim
vendored
Normal file
1
test/fixtures/ftplugin-msg/ftplugin/c.vim
vendored
Normal file
@@ -0,0 +1 @@
|
||||
echomsg 'ftplugin'
|
||||
16
test/run
16
test/run
@@ -5,18 +5,20 @@ cd ..
|
||||
PLUG_SRC=$(pwd)/plug.vim
|
||||
cd - > /dev/null
|
||||
|
||||
export PLUG_FIXTURES=$(pwd)/fixtures
|
||||
|
||||
if [ ! -d vader.vim ]; then
|
||||
git clone https://github.com/junegunn/vader.vim.git
|
||||
fi
|
||||
|
||||
rm -rf fzf
|
||||
rm -rf $PLUG_FIXTURES/fzf
|
||||
if [ ! -d fzf-staged ]; then
|
||||
git clone https://github.com/junegunn/fzf.git fzf-staged
|
||||
git clone https://github.com/junegunn/fzf.git $PLUG_FIXTURES/fzf-staged
|
||||
fi
|
||||
|
||||
make_dirs() {
|
||||
mkdir -p "temp/$1"
|
||||
cd "temp/$1"
|
||||
mkdir -p "$PLUG_FIXTURES/$1"
|
||||
cd "$PLUG_FIXTURES/$1"
|
||||
mkdir -p autoload colors ftdetect ftplugin indent plugin syntax
|
||||
for d in *; do
|
||||
[ -d $d ] || continue
|
||||
@@ -33,12 +35,12 @@ EOF
|
||||
}
|
||||
|
||||
init() {
|
||||
rm -rf temp/{xxx,yyy,z1,z2}
|
||||
rm -rf $PLUG_FIXTURES/{xxx,yyy,z1,z2}
|
||||
|
||||
make_dirs xxx/ xxx
|
||||
make_dirs xxx/after xxx
|
||||
mkdir -p temp/xxx/doc
|
||||
cat > temp/xxx/doc/xxx.txt << DOC
|
||||
mkdir -p $PLUG_FIXTURES/xxx/doc
|
||||
cat > $PLUG_FIXTURES/xxx/doc/xxx.txt << DOC
|
||||
hello *xxx*
|
||||
DOC
|
||||
|
||||
|
||||
@@ -304,7 +304,8 @@ Execute (Rollback recent updates, PlugUpdate, then PlugDiff):
|
||||
|
||||
" ]] motion
|
||||
execute 'normal $]]'
|
||||
AssertEqual lnum + 4, line('.')
|
||||
Assert index([lnum + 4, lnum + 5], line('.')) >= 0
|
||||
" +5 for merge commit
|
||||
AssertEqual 3, col('.')
|
||||
|
||||
" [[ motion
|
||||
@@ -421,7 +422,7 @@ Execute (On-demand loading based on filetypes):
|
||||
**********************************************************************
|
||||
|
||||
Execute (Add unmanaged plugin):
|
||||
let fzf = fnamemodify(g:vader_file, ':h') . '/fzf'
|
||||
let fzf = expand('$PLUG_FIXTURES/fzf')
|
||||
Log fzf
|
||||
|
||||
call plug#begin()
|
||||
@@ -451,6 +452,7 @@ Execute (Plug block for following tests):
|
||||
call plug#end()
|
||||
" Remove plugins from previous tests
|
||||
PlugClean!
|
||||
q
|
||||
|
||||
Execute (PlugInstall will only install vim-easy-align):
|
||||
PlugInstall
|
||||
@@ -479,7 +481,7 @@ Execute (PlugStatus should point out that the plugin is missing):
|
||||
|
||||
Execute (Deploy unmanaged plugin):
|
||||
Assert !exists(':FZF'), ':FZF command should not exist'
|
||||
call rename('fzf-staged', 'fzf')
|
||||
call rename(expand('$PLUG_FIXTURES/fzf-staged'), fzf)
|
||||
|
||||
Execute (PlugUpdate still should not care):
|
||||
PlugUpdate
|
||||
@@ -517,12 +519,37 @@ Execute (Common parent):
|
||||
**********************************************************************
|
||||
~ Frozen plugins
|
||||
**********************************************************************
|
||||
- We've decided to install plugins that are frozen: see #113
|
||||
Execute (Frozen plugin are not ~~installed nor~~ updated):
|
||||
" Remove plugins
|
||||
call plug#begin()
|
||||
call plug#end()
|
||||
PlugClean!
|
||||
q
|
||||
|
||||
Execute (Frozen plugin are not installed nor updated):
|
||||
" vim-easy-align is not found, so it will be installed even though it's frozen
|
||||
call plug#begin()
|
||||
Plug 'junegunn/vim-easy-align', { 'frozen': 1 }
|
||||
call plug#end()
|
||||
PlugInstall
|
||||
AssertEqual 1, len(filter(getline(1, '$'), 'v:val =~ "vim-easy-align"'))
|
||||
q
|
||||
|
||||
" Remove plugins again
|
||||
call plug#begin()
|
||||
call plug#end()
|
||||
PlugClean!
|
||||
q
|
||||
|
||||
" PlugUpdate will do the same
|
||||
call plug#begin()
|
||||
Plug 'junegunn/vim-easy-align', { 'frozen': 1 }
|
||||
call plug#end()
|
||||
PlugInstall
|
||||
AssertEqual 1, len(filter(getline(1, '$'), 'v:val =~ "vim-easy-align"'))
|
||||
q
|
||||
|
||||
" Since vim-easy-align already exists, PlugInstall or PlugUpdate will skip it
|
||||
redir => out
|
||||
silent PlugInstall
|
||||
redir END
|
||||
@@ -594,6 +621,7 @@ Execute (Cleanup):
|
||||
call plug#begin()
|
||||
call plug#end()
|
||||
PlugClean!
|
||||
q
|
||||
|
||||
Execute (On install):
|
||||
call plug#begin()
|
||||
@@ -732,12 +760,12 @@ Execute (Using custom dir):
|
||||
**********************************************************************
|
||||
Before (Clear global vars):
|
||||
let g:xxx = []
|
||||
set rtp-=$PWD/temp/xxx/
|
||||
set rtp-=$PWD/temp/xxx/after
|
||||
set rtp-=$PLUG_FIXTURES/xxx/
|
||||
set rtp-=$PLUG_FIXTURES/xxx/after
|
||||
|
||||
Execute (Immediate loading):
|
||||
call plug#begin()
|
||||
Plug '$PWD/temp/xxx'
|
||||
Plug '$PLUG_FIXTURES/xxx'
|
||||
call plug#end()
|
||||
|
||||
" FIXME:
|
||||
@@ -751,7 +779,7 @@ Execute (Immediate loading):
|
||||
|
||||
Execute (Command-based on-demand loading):
|
||||
call plug#begin()
|
||||
Plug '$PWD/temp/xxx', { 'on': 'XXX' }
|
||||
Plug '$PLUG_FIXTURES/xxx', { 'on': 'XXX' }
|
||||
call plug#end()
|
||||
|
||||
AssertEqual [], g:xxx
|
||||
@@ -764,7 +792,7 @@ Execute (Command-based on-demand loading):
|
||||
|
||||
Execute (Filetype-based on-demand loading):
|
||||
call plug#begin()
|
||||
Plug '$PWD/temp/xxx', { 'for': 'xxx' }
|
||||
Plug '$PLUG_FIXTURES/xxx', { 'for': 'xxx' }
|
||||
call plug#end()
|
||||
|
||||
AssertEqual ['xxx/ftdetect', 'xxx/after/ftdetect'], g:xxx
|
||||
@@ -779,10 +807,10 @@ Before:
|
||||
**********************************************************************
|
||||
|
||||
Execute (plug#helptags):
|
||||
silent! call delete(expand('$PWD/temp/xxx/doc/tags'))
|
||||
Assert !filereadable(expand('$PWD/temp/xxx/doc/tags'))
|
||||
silent! call delete(expand('$PLUG_FIXTURES/xxx/doc/tags'))
|
||||
Assert !filereadable(expand('$PLUG_FIXTURES/xxx/doc/tags'))
|
||||
AssertEqual 1, plug#helptags()
|
||||
Assert filereadable(expand('$PWD/temp/xxx/doc/tags'))
|
||||
Assert filereadable(expand('$PLUG_FIXTURES/xxx/doc/tags'))
|
||||
|
||||
**********************************************************************
|
||||
~ Manual loading
|
||||
@@ -823,7 +851,7 @@ Execute (PlugStatus should not contain (not loaded)):
|
||||
|
||||
Execute (Load plugin from PlugStatus screen with L key in normal mode):
|
||||
call plug#begin()
|
||||
Plug '$PWD/temp/yyy', { 'on': [] }
|
||||
Plug '$PLUG_FIXTURES/yyy', { 'on': [] }
|
||||
call plug#end()
|
||||
|
||||
PlugStatus
|
||||
@@ -837,8 +865,8 @@ Execute (Load plugin from PlugStatus screen with L key in normal mode):
|
||||
|
||||
Execute (Load plugin from PlugStatus screen with L key in visual mode):
|
||||
call plug#begin()
|
||||
Plug '$PWD/temp/z1', { 'on': [] }
|
||||
Plug '$PWD/temp/z2', { 'for': [] }
|
||||
Plug '$PLUG_FIXTURES/z1', { 'on': [] }
|
||||
Plug '$PLUG_FIXTURES/z2', { 'for': [] }
|
||||
call plug#end()
|
||||
|
||||
PlugStatus
|
||||
@@ -964,8 +992,8 @@ Execute (Plug directory with comma):
|
||||
Execute (Strict load order):
|
||||
let g:total_order = []
|
||||
call plug#begin()
|
||||
Plug '$PWD/temp/xxx'
|
||||
Plug '$PWD/temp/yyy', { 'for': ['xxx'] }
|
||||
Plug '$PLUG_FIXTURES/xxx'
|
||||
Plug '$PLUG_FIXTURES/yyy', { 'for': ['xxx'] }
|
||||
call plug#end()
|
||||
call EnsureLoaded()
|
||||
setf xxx
|
||||
@@ -977,8 +1005,8 @@ Execute (Strict load order):
|
||||
|
||||
let g:total_order = []
|
||||
call plug#begin()
|
||||
Plug '$PWD/temp/xxx', { 'for': ['xxx'] }
|
||||
Plug '$PWD/temp/yyy'
|
||||
Plug '$PLUG_FIXTURES/xxx', { 'for': ['xxx'] }
|
||||
Plug '$PLUG_FIXTURES/yyy'
|
||||
call plug#end()
|
||||
call EnsureLoaded()
|
||||
set rtp^=manually-prepended
|
||||
@@ -994,8 +1022,8 @@ Execute (Strict load order):
|
||||
|
||||
let g:total_order = []
|
||||
call plug#begin()
|
||||
Plug '$PWD/temp/xxx', { 'for': ['xxx'] }
|
||||
Plug '$PWD/temp/yyy', { 'for': ['xxx'] }
|
||||
Plug '$PLUG_FIXTURES/xxx', { 'for': ['xxx'] }
|
||||
Plug '$PLUG_FIXTURES/yyy', { 'for': ['xxx'] }
|
||||
call plug#end()
|
||||
call EnsureLoaded()
|
||||
setf xxx
|
||||
@@ -1007,9 +1035,11 @@ Execute (Strict load order):
|
||||
|
||||
**********************************************************************
|
||||
Execute (PlugClean should not try to remove unmanaged plugins inside g:plug_home):
|
||||
call plug#begin('$PWD/temp')
|
||||
Plug '$PWD/temp/xxx'
|
||||
Plug '$PWD/temp/yyy'
|
||||
call plug#begin('$PLUG_FIXTURES')
|
||||
Plug '$PLUG_FIXTURES/ftplugin-msg', { 'for': [] }
|
||||
Plug '$PLUG_FIXTURES/fzf'
|
||||
Plug '$PLUG_FIXTURES/xxx'
|
||||
Plug '$PLUG_FIXTURES/yyy'
|
||||
call plug#end()
|
||||
|
||||
" Remove z1, z2
|
||||
@@ -1022,6 +1052,24 @@ Execute (PlugClean should not try to remove unmanaged plugins inside g:plug_home
|
||||
AssertExpect 'Already clean', 1
|
||||
q
|
||||
|
||||
**********************************************************************
|
||||
Execute (#112 On-demand loading should not suppress messages from ftplugin):
|
||||
call plug#begin('$PLUG_FIXTURES')
|
||||
Plug '$PLUG_FIXTURES/ftplugin-msg', { 'for': 'c' }
|
||||
call plug#end()
|
||||
|
||||
redir => out
|
||||
tabnew a.c
|
||||
redir END
|
||||
Assert stridx(out, 'ftplugin') >= 0
|
||||
|
||||
* The same applies to plug#load())
|
||||
redir => out
|
||||
call plug#load('ftplugin-msg')
|
||||
redir END
|
||||
Assert stridx(out, 'ftplugin') >= 0
|
||||
q
|
||||
|
||||
**********************************************************************
|
||||
Execute (PlugSnapshot):
|
||||
call plug#begin('$TMPDIR/plugged')
|
||||
@@ -1029,6 +1077,7 @@ Execute (PlugSnapshot):
|
||||
Plug 'junegunn/seoul256.vim'
|
||||
call plug#end()
|
||||
|
||||
PlugClean!
|
||||
PlugInstall
|
||||
PlugSnapshot
|
||||
AssertEqual '#!/bin/bash', getline(1)
|
||||
@@ -1044,10 +1093,66 @@ Execute (PlugSnapshot):
|
||||
AssertEqual 'snapshot.sh', fnamemodify(expand('%'), ':t')
|
||||
q
|
||||
|
||||
**********************************************************************
|
||||
Execute (#114 Should not contain empty path in &rtp):
|
||||
call plug#begin('$TMPDIR/plugged')
|
||||
call plug#end()
|
||||
|
||||
Log &rtp
|
||||
Assert &rtp !~ ',,', 'Commas'
|
||||
Assert &rtp !~ '^,', 'Comma prefix'
|
||||
Assert &rtp !~ ',$', 'Comma suffix'
|
||||
|
||||
**********************************************************************
|
||||
Execute (#130 Proper cleanup of on-demand loading triggers):
|
||||
augroup PlugLOD
|
||||
autocmd!
|
||||
augroup END
|
||||
|
||||
" Cleared on command
|
||||
call plug#begin('$TMPDIR/plugged')
|
||||
Plug 'junegunn/vim-emoji', { 'on': ['EmojiCommand', 'EmojiCommand2', '<Plug>(EmojiMapping)'] }
|
||||
call plug#end()
|
||||
PlugInstall | q
|
||||
|
||||
Assert exists(':EmojiCommand'), 'EmojiCommand not defined'
|
||||
Assert exists(':EmojiCommand2'), 'EmojiCommand2 not defined'
|
||||
Assert !empty(mapcheck('<Plug>(EmojiMapping)')), '<Plug>(EmojiMapping) not defined'
|
||||
|
||||
silent! EmojiCommand
|
||||
|
||||
Assert !exists(':EmojiCommand'), 'EmojiCommand defined'
|
||||
Assert !exists(':EmojiCommand2'), 'EmojiCommand2 defined'
|
||||
Assert empty(mapcheck('<Plug>(EmojiMapping)')), '<Plug>(EmojiMapping) defined'
|
||||
|
||||
" Cleared on FileType
|
||||
call plug#begin('$TMPDIR/plugged')
|
||||
Plug 'junegunn/vim-emoji', { 'on': ['EmojiCommandExtra', '<Plug>(EmojiMappingExtra)'], 'for': ['emoji'] }
|
||||
call plug#end()
|
||||
|
||||
Assert exists(':EmojiCommandExtra'), 'EmojiCommandExtra not defined'
|
||||
Assert !empty(mapcheck('<Plug>(EmojiMappingExtra)')), '<Plug>(EmojiMappingExtra) not defined'
|
||||
|
||||
setf emoji
|
||||
|
||||
Assert !exists(':EmojiCommandExtra'), 'EmojiCommandExtra defined'
|
||||
Assert empty(mapcheck('<Plug>(EmojiMappingExtra)')), '<Plug>(EmojiMappingExtra) defined'
|
||||
|
||||
**********************************************************************
|
||||
Execute (#131 Syntax error):
|
||||
call plug#begin('/no-permission')
|
||||
Plug 'junegunn/vim-emoji'
|
||||
call plug#end()
|
||||
|
||||
redir => out
|
||||
silent PlugInstall
|
||||
redir END
|
||||
Assert out =~ 'Invalid plug directory: /no-permission'
|
||||
|
||||
Execute (Cleanup):
|
||||
silent! call system('rm -rf '.temp_plugged)
|
||||
silent! call system('rm -rf '.temp_plugged)
|
||||
silent! call rename('fzf', 'fzf-staged')
|
||||
silent! call rename(fzf, expand('$PLUG_FIXTURES/fzf-staged'))
|
||||
silent! unlet g:plugs
|
||||
silent! unlet g:plug_home
|
||||
silent! unlet g:plug_url_format
|
||||
|
||||
Reference in New Issue
Block a user