Skip to content

Instantly share code, notes, and snippets.

@kyohsuke
Created May 17, 2011 10:04
Show Gist options
  • Save kyohsuke/976232 to your computer and use it in GitHub Desktop.
Save kyohsuke/976232 to your computer and use it in GitHub Desktop.
環境変数を波及させるのって、こんな感じだったらいいのかな?
function! s:pushEnv(shname)
if a:shname == 'bash'
let l:envs = split(system('bash -c "source ~/.bashrc; source ~/.bash_profile; export"'))
elseif a:shname == 'zsh'
let l:envs = split(system('zsh -c "source ~/.zshrc; source ~/.zshenv; export"'))
else
return
endif
for l:env in l:envs
unlet! l:envkeyval
unlet! l:envkey
unlet! l:envval
let l:envkeyval = split(l:env, '=')
let l:envkey = l:envkeyval[0]
unlet l:envkeyval[0]
let l:envval = join(l:envkeyval, '=')
execute 'let $' . l:envkey . '="' . l:envval . '"'
endfor
endfunction
call s:pushEnv('zsh')
@Shougo
Copy link

Shougo commented May 20, 2011

system()よりは、vimproc#system()のほうが良いです。

あと、vimproc#system('env')でWindowsでもLinux/Macでも環境変数のリストが取れます。
こっちをパースするべきかと。

vimshell限定ということで話をします。
環境変数を保存・復元するには、vimshell#set_variables(), vimshell#restore_variables()が使えます。
iexe内部コマンドとかで使っているので参考にしてください。

@kyohsuke
Copy link
Author

おぉ、アドバイスありがとうございます!!

こっちの gist はブログに貼るために利用しちゃって書き換えられないので、
vimrc の方で vimproc#system を利用する形に変更します!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment