Skip to content

Instantly share code, notes, and snippets.

@lambdalisue
Created January 29, 2018 13:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lambdalisue/52d423d564272ceed81f0ca983c56133 to your computer and use it in GitHub Desktop.
Save lambdalisue/52d423d564272ceed81f0ca983c56133 to your computer and use it in GitHub Desktop.
system() by System.Job
let s:Job = vital#vital#import('System.Job')
function! s:_on_stdout(data) abort dict
let self.stdout[-1] .= a:data[0]
call extend(self.stdout, a:data[1:])
endfunction
function! s:_on_stderr(data) abort dict
let self.stderr[-1] .= a:data[0]
call extend(self.stderr, a:data[1:])
endfunction
function! s:system(...) abort
let job = s:Job.start(a:000, {
\ 'stdout': [''],
\ 'stderr': [''],
\ 'on_stdout': function('s:_on_stdout'),
\ 'on_stderr': function('s:_on_stderr'),
\})
let exit_status = job.wait()
return {
\ 'exit_status': exit_status,
\ 'stdout': job.stdout,
\ 'stderr': job.stderr,
\}
endfunction
echo s:system('true')
echo s:system('false')
echo s:system('git', '-h')
@lambdalisue
Copy link
Author


{'stderr': [''], 'exit_status': 0, 'stdout': ['']}
{'stderr': [''], 'exit_status': 1, 'stdout': ['']}
{'stderr': ['Unknown option: -h', 'usage: git [--version] [--help] [-C <path>] [-c name=value]', '           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]', '           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]', '           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]', '           <command> [<args>]', ''], 'exit_status': 129, 'stdout': ['']}
*** time: 0.11431 ***

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