*asyncrun.txt* asyncrun.vim: Run Async Shell Commands in Vim 8.0 and Output to Quickfix Window =============================================================================== Contents ~ 1. Introduction |asyncrun-introduction| 2. Preface |asyncrun-43-preface| 3. News |asyncrun-44-news| 4. Install |asyncrun-45-install| 5. Example |asyncrun-46-example| 6. Tutorials |asyncrun-48-tutorials| 1. Async run gcc to compile current file |asyncrun-49-async-run-gcc-to-compile-current-file| 2. Async run make |asyncrun-50-async-run-make| 3. Grep key word |asyncrun-51-grep-key-word| 4. Compile go project |asyncrun-52-compile-go-project| 5. Lookup man page |asyncrun-53-lookup-man-page| 6. Git push |asyncrun-54-git-push| 7. Setup '' to compile file |F7| 7. Manual |asyncrun-56-manual| 1. AsyncRun - Run shell command |57-asyncrun-run-shell-command| 2. AsyncStop - Stop the running job |asyncrun-58-asyncstop-stop-running-job| 3. Settings: |asyncrun-59-settings| 4. Variables: |asyncrun-61-variables| 5. Requirements: |asyncrun-62-requirements| 6. Cooperate with vim-fugitive: |asyncrun-63-cooperate-with-vim-fugitive| 8. More |asyncrun-66-more| 9. Further |asyncrun-75-further| 10. History |asyncrun-77-history| 11. Credits |asyncrun-78-credits| 12. References |asyncrun-references| =============================================================================== *asyncrun-introduction* Introduction ~ Run Async Shell Commands in Vim 8.0 and Output to Quickfix Window =============================================================================== *asyncrun-43-preface* Preface ~ This plugin takes the advantage of new apis in Vim 8 (and NeoVim) to enable you to run shell commands in background and read output in the quickfix window in realtime: - Easy to use, just start your background command by ':AsyncRun' (just like old "!" cmd). - Command is done in the background, no need to wait for the entire process to finish. - Output are displayed in the quickfix window, errors are matched with 'errorformat'. - You can explore the error output immediately or keep working in vim while executing. - Ring the bell or play a sound to notify you job finished while you're focusing on editing. - Fast and lightweight, just a single self-contained 'asyncrun.vim' source file. - Provide corresponding user experience vim, neovim, gvim and macvim. If that doesn't excite you, then perhaps this GIF screen capture below will change your mind. =============================================================================== *asyncrun-44-news* News ~ - 2016/10/17 Glad to announce that 'asyncrun.vim' supports NeoVim now. - 2016/10/15 'asyncrun.vim' can cooperate with 'vim-fugitive', see the bottom of the README. =============================================================================== *asyncrun-45-install* Install ~ Copy 'asyncrun.vim' to your '~/.vim/plugin' or use Vundle to install it from 'skywind3000/asyncrun.vim' . =============================================================================== *asyncrun-46-example* Example ~ Image: [47] =============================================================================== *asyncrun-48-tutorials* Tutorials ~ ------------------------------------------------------------------------------- *asyncrun-49-async-run-gcc-to-compile-current-file* Async run gcc to compile current file ~ > :AsyncRun gcc % -o %< :AsyncRun g++ -O3 "%" -o "%<" -lpthread < This command will run gcc in the background and output to the quickfix window in realtime. Macro ''%'' stands for filename and ''%>'' represents filename without extension. ------------------------------------------------------------------------------- *asyncrun-50-async-run-make* Async run make ~ > :AsyncRun make :AsyncRun make -f makefile < ------------------------------------------------------------------------------- *asyncrun-51-grep-key-word* Grep key word ~ > :AsyncRun! grep -R word . :AsyncRun! grep -R . < when '!' is included, auto-scroll in quickfix will be disabled. '' represents current word under cursor. ------------------------------------------------------------------------------- *asyncrun-52-compile-go-project* Compile go project ~ > :AsyncRun go build "%:p:h" < Macro ''%:p:h'' stands for current file dir. ------------------------------------------------------------------------------- *asyncrun-53-lookup-man-page* Lookup man page ~ > :AsyncRun! man -S 3:2:1 < ------------------------------------------------------------------------------- *asyncrun-54-git-push* Git push ~ > :AsyncRun git push origin master < ------------------------------------------------------------------------------- Setup '<*F7*>' to compile file > :noremap :AsyncRun gcc "%" -o "%<" < File name may contain spaces, therefore, it's safe to quote them. =============================================================================== *asyncrun-56-manual* Manual ~ There are two vim commands: ':AsyncRun' and ':AsyncStop' to control async jobs. ------------------------------------------------------------------------------- *57-asyncrun-run-shell-command* AsyncRun - Run shell command ~ > :AsyncRun[!] [options] {cmd} ... < run shell command in background and output to quickfix. when '!' is included, auto-scroll in quickfix will be disabled. Parameters are splited by space, if a parameter contains space, it should be **quoted** or escaped as backslash + space (unix only). Parameters accept macros start with ''%'', ''#'' or ''<'' : > %:p - File name of current buffer with full path %:t - File name of current buffer without path %:p:h - File path of current buffer without file name %:e - File extension of current buffer %:t:r - File name of current buffer without path and extension % - File name relativize to current directory %:h:. - File path relativize to current directory - Current directory - Current word under cursor - Current file name under cursor < Environment variables are set before executing: > $VIM_FILEPATH - File name of current buffer with full path $VIM_FILENAME - File name of current buffer without path $VIM_FILEDIR - Full path of current buffer without the file name $VIM_FILEEXT - File extension of current buffer $VIM_FILENOEXT - File name of current buffer without path and extension $VIM_CWD - Current directory $VIM_RELDIR - File path relativize to current directory $VIM_RELNAME - File name relativize to current directory $VIM_CWORD - Current word under cursor $VIM_CFILE - Current filename under cursor $VIM_GUI - Is running under gui ? $VIM_VERSION - Value of v:version $VIM_COLUMNS - How many columns in vim's screen $VIM_LINES - How many lines in vim's screen $VIM_SVRNAME - Value of v:servername for +clientserver usage < These environment variables wrapped by '$(...)' (eg. '$(VIM_FILENAME)') will also be expanded in the parameters. There can be some options before your '[cmd]': > -mode=0/1/2 - start mode: 0(async, default), 1(:make), 2(:!) -cwd=? - initial directory, (use current directory if unset) -save=0/1 - non-zero to save unsaved files before executing -program=? - set to `make` to use `&makeprg`, `grep` to use `&grepprg` -post=? - vimscript to exec after this job finished, spaces **must** be escaped to '\ ' < All options must start with a minus and position **before** '[cmd]'. Since no shell command string starts with a minus. So they can be distinguished from shell command easily without any ambiguity. Don't worry if you do have a shell command starting with '-', Just put a placeholder '@' before your command to tell asyncrun explicitly: "stop parsing options now, the following string is all my command". ------------------------------------------------------------------------------- *asyncrun-58-asyncstop-stop-running-job* AsyncStop - Stop the running job ~ > :AsyncStop[!] < stop the running job, when "!" is included, job will be stopped by signal KILL ------------------------------------------------------------------------------- *asyncrun-59-settings* Settings: ~ - g:asyncrun_exit - script will be executed after finished - g:asyncrun_bell - non-zero to ring a bell after finished - g:asyncrun_mode - 0:async(require vim 7.4.1829) 1:sync 2:shell - g:asyncrun_encs - set shell encoding if it's different from '&encoding', see here [60] - g:asyncrun_trim - non-zero to trim the empty lines in the quickfix window. ------------------------------------------------------------------------------- *asyncrun-61-variables* Variables: ~ - g:asyncrun_code - exit code - g:asyncrun_status - 'running', 'success' or 'failure' ------------------------------------------------------------------------------- *asyncrun-62-requirements* Requirements: ~ Vim 7.4.1829 is minimal version to support async mode. If you are use older versions, 'g:asyncrun_mode' will fall back from '0/async' to '1/sync'. NeoVim 0.1.4 or later is also supported. Recommend to use Vim 8.0 or later. ------------------------------------------------------------------------------- *asyncrun-63-cooperate-with-vim-fugitive* Cooperate with vim-fugitive: ~ asyncrun.vim can cooperate with 'vim-fugitive', see here [64]. Image: [65] =============================================================================== *asyncrun-66-more* More ~ - Additional examples (background ctags updating, pdf conversion, ...) [67] - Notify user job finished by playing a sound [68] - View progress in status line or vim airline [69] - Best practice with quickfix windows [70] - Scroll the quickfix window only if the cursor is on the last line [71] - Cooperate with vim-fugitive [64] - Replace old ':make' command with asyncrun [72] - Quickfix encoding problem when using Chinese or Japanese [60] - Example for updating and adding cscope files [73] Don't forget to read the Frequently Asked Questions [74]. =============================================================================== *asyncrun-75-further* Further ~ - Experiment: get netrw using asyncrun to save remote files [76] =============================================================================== *asyncrun-77-history* History ~ - 1.3.3 (2016-10-28): prevent job who reads stdin getting hanging, fixed an issue in fast exiting jobs. - 1.3.2 (2016-10-19): new "-post" option to run a vimscript after the job finished - 1.3.1 (2016-10-18): fixed few issues of arguments passing in different modes - 1.3.0 (2016-10-17): add support to neovim, better CJK characters handling. - 1.2.0 (2016-10-16): refactor, correct arguments parsing, cmd options and &makeprg supports - 1.1.1 (2016-10-13): use the vim native &shell and &shellcmdflag config to execute commands. - 1.1.0 (2016-10-12): quickfix window scroll only if cursor is on the last line - 1.0.3 (2016-10-10): reduce quickfix output latency. - 1.0.2 (2016-10-09): fixed an issue in replacing macros in parameters. - 1.0.1 (2016-10-07): Add a convenient way to toggle quickfix window (asyncrun#quickfix_toggle) - 1.0.0 (2016-09-21): can fall back to sync mode to compatible older vim versions. - 0.0.3 (2016-09-15): new arguments now accept environment variables wrapped by $(...) - 0.0.2 (2016-09-12): some improvements and more documents for a tiny tutorial. - 0.0.1 (2016-09-08): improve arguments parsing - 0.0.0 (2016-08-24): initial version =============================================================================== *asyncrun-78-credits* Credits ~ Trying best to provide the most simply and convenience experience in the asynchronous-jobs. Author: skywind3000 Please vote it if you like it: http://www.vim.org/scripts/script.php?script_id=5431 =============================================================================== *asyncrun-references* References ~ [1] https://github.com/skywind3000/asyncrun.vim#start-of-content [2] https://github.com/ [3] https://github.com/personal [4] https://github.com/open-source [5] https://github.com/business [6] https://github.com/explore [7] https://github.com/join?source=header-repo [8] https://github.com/login?return_to=%2Fskywind3000%2Fasyncrun.vim [9] https://github.com/pricing [10] https://github.com/blog [11] https://help.github.com [12] https://github.com/search [13] https://github.com/skywind3000/asyncrun.vim/watchers [14] https://github.com/skywind3000/asyncrun.vim/stargazers [15] https://github.com/skywind3000/asyncrun.vim/network [16] https://github.com/skywind3000/asyncrun.vim [17] https://github.com/skywind3000/asyncrun.vim/issues [18] https://github.com/skywind3000/asyncrun.vim/pulls [19] https://github.com/skywind3000/asyncrun.vim/projects [20] https://github.com/skywind3000/asyncrun.vim/wiki [21] https://github.com/skywind3000/asyncrun.vim/pulse [22] https://github.com/skywind3000/asyncrun.vim/graphs [23] https://github.com/skywind3000/asyncrun.vim/commits/master [24] https://github.com/skywind3000/asyncrun.vim/branches [25] https://github.com/skywind3000/asyncrun.vim/releases [26] https://github.com/skywind3000/asyncrun.vim/graphs/contributors [27] https://github.com/skywind3000/asyncrun.vim/blob/master/LICENSE [28] https://github.com/skywind3000/asyncrun.vim/search?l=vim [29] https://help.github.com/articles/which-remote-url-should-i-use [30] https://github.com/skywind3000/asyncrun.vim/archive/master.zip [31] https://github.com/skywind3000/asyncrun.vim/find/master [32] https://github.com/skywind3000/asyncrun.vim/tree/master [33] https://github.com/skywind3000/asyncrun.vim/commit/1edc42699bcb8a1b17398c2590a27636e327531d [34] https://camo.githubusercontent.com/a08cc422099cb8fd2a030bc7e6da7732e483e336/68747470733a2f2f322e67726176617461722e636f6d2f6176617461722f33313761636661306235663764643563623831363331303365326266623366363f643d68747470732533412532462532466173736574732d63646e2e6769746875622e636f6d253246696d6167657325324667726176617461727325324667726176617461722d757365722d3432302e706e6726723d7826733d313430 [35] https://github.com/skywind3000/asyncrun.vim/tree/1edc42699bcb8a1b17398c2590a27636e327531d [36] https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif [37] https://github.com/skywind3000/asyncrun.vim/tree/master/doc [38] https://github.com/skywind3000/asyncrun.vim/commit/7b906e89f42b811176007a52a8affdfd11c76a93 [39] https://github.com/skywind3000/asyncrun.vim/tree/master/plugin [40] https://github.com/skywind3000/asyncrun.vim/commit/c9bb3b9a1909a7e3bcc53817cefa94460cd4a85e [41] https://github.com/skywind3000/asyncrun.vim/commit/e4f207983822abb58df9f3577cf0b3fbacdf0231 [42] https://github.com/skywind3000/asyncrun.vim/blob/master/README.md [43] https://github.com/skywind3000/asyncrun.vim#preface [44] https://github.com/skywind3000/asyncrun.vim#news [45] https://github.com/skywind3000/asyncrun.vim#install [46] https://github.com/skywind3000/asyncrun.vim#example [47] https://raw.githubusercontent.com/skywind3000/asyncrun.vim/master/doc/screenshot.gif [48] https://github.com/skywind3000/asyncrun.vim#tutorials [49] https://github.com/skywind3000/asyncrun.vim#async-run-gcc-to-compile-current-file [50] https://github.com/skywind3000/asyncrun.vim#async-run-make [51] https://github.com/skywind3000/asyncrun.vim#grep-key-word [52] https://github.com/skywind3000/asyncrun.vim#compile-go-project [53] https://github.com/skywind3000/asyncrun.vim#lookup-man-page [54] https://github.com/skywind3000/asyncrun.vim#git-push [55] https://github.com/skywind3000/asyncrun.vim#setup-f7-to-compile-file [56] https://github.com/skywind3000/asyncrun.vim#manual [57] https://github.com/skywind3000/asyncrun.vim#asyncrun---run-shell-command [58] https://github.com/skywind3000/asyncrun.vim#asyncstop---stop-the-running-job [59] https://github.com/skywind3000/asyncrun.vim#settings [60] https://github.com/skywind3000/asyncrun.vim/wiki/Quickfix-encoding-problem-when-using-Chinese-or-Japanese [61] https://github.com/skywind3000/asyncrun.vim#variables [62] https://github.com/skywind3000/asyncrun.vim#requirements [63] https://github.com/skywind3000/asyncrun.vim#cooperate-with-vim-fugitive [64] https://github.com/skywind3000/asyncrun.vim/wiki/Cooperate-with-vim-fugitive [65] https://raw.githubusercontent.com/skywind3000/asyncrun.vim/master/doc/cooperate_with_fugitive.gif [66] https://github.com/skywind3000/asyncrun.vim#more [67] https://github.com/skywind3000/asyncrun.vim/wiki/Additional-Examples [68] https://github.com/skywind3000/asyncrun.vim/wiki/Playing-Sound [69] https://github.com/skywind3000/asyncrun.vim/wiki/Display-Progress-in-Status-Line-or-Airline [70] https://github.com/skywind3000/asyncrun.vim/wiki/Quickfix-Best-Practice [71] https://github.com/skywind3000/asyncrun.vim/wiki/Scroll-the-quickfix-window-only-if-cursor-is-on-the-last-line [72] https://github.com/skywind3000/asyncrun.vim/wiki/Replace-old-make-command-with-AsyncRun [73] https://github.com/skywind3000/asyncrun.vim/wiki/Example-for-updating-and-adding-cscope [74] https://github.com/skywind3000/asyncrun.vim/wiki/FAQ [75] https://github.com/skywind3000/asyncrun.vim#further [76] https://github.com/skywind3000/asyncrun.vim/wiki/Get-netrw-using-asyncrun-to-save-remote-files [77] https://github.com/skywind3000/asyncrun.vim#history [78] https://github.com/skywind3000/asyncrun.vim#credits [79] https://github.com/contact [80] https://developer.github.com [81] https://training.github.com [82] https://shop.github.com [83] https://github.com/about [84] https://github.com [85] https://github.com/site/terms [86] https://github.com/site/privacy [87] https://github.com/security [88] https://status.github.com/ vim: ft=help