1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-23 13:40:05 +08:00
SpaceVim/bundle/vim-virtualenv/autoload/virtualenv.vim

117 lines
3.2 KiB
VimL
Raw Normal View History

if has('python3')
python3 import sys, vim
python3 if vim.eval('expand("<sfile>:p:h")') not in sys.path: sys.path.append(vim.eval('expand("<sfile>:p:h")'))
python3 import pyvenv
endif
if has('python')
python import sys, vim
python if vim.eval('expand("<sfile>:p:h")') not in sys.path: sys.path.append(vim.eval('expand("<sfile>:p:h")'))
python import pyvenv
endif
function! virtualenv#activate(...)
let name = a:0 > 0 ? a:1 : ''
let silent = a:0 > 1 ? a:2 : 0
let env_dir = ''
if len(name) == 0 "Figure out the name based on current file
if isdirectory($VIRTUAL_ENV)
let name = fnamemodify($VIRTUAL_ENV, ':t')
let env_dir = $VIRTUAL_ENV
elseif isdirectory($PROJECT_HOME)
let fn = expand('%:p')
let pat = '^'.$PROJECT_HOME.'/'
if fn =~ pat
let name = fnamemodify(substitute(fn, pat, '', ''), ':h')
if name != '.' "No project directory
let env_dir = g:virtualenv_directory.'/'.name
endif
endif
endif
else
let env_dir = g:virtualenv_directory.'/'.name
endif
"Couldn't figure it out, so DIE
if !isdirectory(env_dir)
if !silent
echoerr "No virtualenv could be auto-detected and activated."
endif
return
endif
let bin = env_dir.(has('win32')? '/Scripts': '/bin')
call virtualenv#deactivate()
let s:prev_path = $PATH
" Prepend bin to PATH, but only if it's not there already
" (activate_this does this also, https://github.com/pypa/virtualenv/issues/14)
if $PATH[:len(bin)] != bin.':'
let $PATH = bin.':'.$PATH
endif
if has('python')
python pyvenv.activate(vim.eval('l:env_dir'))
endif
if has('python3')
python3 pyvenv.activate(vim.eval('l:env_dir'))
endif
let g:virtualenv_name = name
let $VIRTUAL_ENV = env_dir
if exists("*airline#extensions#virtualenv#update")
call airline#extensions#virtualenv#update()
endif
endfunction
function! virtualenv#deactivate()
if has('python')
python pyvenv.deactivate()
endif
if has('python3')
python3 pyvenv.deactivate()
endif
unlet! g:virtualenv_name
let $VIRTUAL_ENV = '' " can't delete parent variables
if exists('s:prev_path')
let $PATH = s:prev_path
endif
if exists("*airline#extensions#virtualenv#update")
call airline#extensions#virtualenv#update()
endif
endfunction
function! virtualenv#list()
for name in virtualenv#names('')
echo name
endfor
endfunction
function! virtualenv#statusline()
if exists('g:virtualenv_name')
return substitute(g:virtualenv_stl_format, '\C%n', g:virtualenv_name, 'g')
else
return ''
endif
endfunction
function! virtualenv#names(prefix)
let venvs = []
for dir in split(glob(g:virtualenv_directory.'/'.a:prefix.'*'), '\n')
if !isdirectory(dir)
continue
endif
let fn = dir.(has('win32')? '/Scripts': '/bin').'/activate'
if !filereadable(fn)
continue
endif
call add(venvs, fnamemodify(dir, ':t'))
endfor
return venvs
endfunction