diff options
-rw-r--r-- | runtime/doc/quickfix.txt | 13 | ||||
-rw-r--r-- | src/ex_cmds.h | 2 | ||||
-rw-r--r-- | src/ex_docmd.c | 4 | ||||
-rw-r--r-- | src/testdir/test_quickfix.vim | 25 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 41 insertions, 5 deletions
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt index 5879727d2..ae4581915 100644 --- a/runtime/doc/quickfix.txt +++ b/runtime/doc/quickfix.txt @@ -229,8 +229,17 @@ processing a quickfix or location list command, it will be aborted. current window is used instead of the quickfix list. *:cq* *:cquit* -:cq[uit][!] Quit Vim with an error code, so that the compiler - will not compile the same file again. +:cq[uit][!] +:{N}cq[uit][!] +:cq[uit][!] {N} Quit Vim with error code {N}. {N} defaults to one. + Useful when Vim is called from another program: + e.g., a compiler will not compile the same file again, + `git commit` will abort the committing process, `fc` + (built-in for shells like bash and zsh) will not + execute the command, etc. will not compile the same + file again. + {N} can also be zero, in which case Vim exits + normally. WARNING: All changes in files are lost! Also when the [!] is not used. It works like ":qall!" |:qall|, except that Vim returns a non-zero exit code. diff --git a/src/ex_cmds.h b/src/ex_cmds.h index 14b43bda4..928b1100d 100644 --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -407,7 +407,7 @@ EXCMD(CMD_cpfile, "cpfile", ex_cnext, EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG, ADDR_OTHER), EXCMD(CMD_cquit, "cquit", ex_cquit, - EX_TRLBAR|EX_BANG, + EX_RANGE|EX_COUNT|EX_ZEROR|EX_TRLBAR|EX_BANG, ADDR_NONE), EXCMD(CMD_crewind, "crewind", ex_cc, EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG, diff --git a/src/ex_docmd.c b/src/ex_docmd.c index a3442edbe..de8fb4961 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -4920,8 +4920,8 @@ ex_quit(exarg_T *eap) static void ex_cquit(exarg_T *eap UNUSED) { - getout(1); // this does not always pass on the exit code to the Manx - // compiler. why? + // this does not always pass on the exit code to the Manx compiler. why? + getout(eap->addr_count > 0 ? (int)eap->line2 : EXIT_FAILURE); } /* diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index f7c73f4c3..b7b428196 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -4674,4 +4674,29 @@ func Test_search_in_dirstack() call delete('Xtestdir', 'rf') endfunc +" Test for :cquit +func Test_cquit() + " Exit Vim with a non-zero value + if RunVim([], ["cquit 7"], '') + call assert_equal(7, v:shell_error) + endif + + if RunVim([], ["50cquit"], '') + call assert_equal(50, v:shell_error) + endif + + " Exit Vim with default value + if RunVim([], ["cquit"], '') + call assert_equal(1, v:shell_error) + endif + + " Exit Vim with zero value + if RunVim([], ["cquit 0"], '') + call assert_equal(0, v:shell_error) + endif + + " Exit Vim with negative value + call assert_fails('-3cquit', 'E16:') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 41a6d3701..d007585ea 100644 --- a/src/version.c +++ b/src/version.c @@ -743,6 +743,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 95, +/**/ 94, /**/ 93, |