Skip to content

Instantly share code, notes, and snippets.

@for-coursera
Last active October 15, 2015 17:21
Show Gist options
  • Select an option

  • Save for-coursera/522862e21fd8a868b818 to your computer and use it in GitHub Desktop.

Select an option

Save for-coursera/522862e21fd8a868b818 to your computer and use it in GitHub Desktop.
bvimgrep-patch
# HG changeset patch
# Parent 03fc4a77ed148ec824787f6930d1e595df27f45f
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -628,6 +628,21 @@ 5.1 using Vim's internal grep
the current window is used instead of the quickfix
list.
+ *:bv* *:bvimgrep*
+:bvimgrep[!] /{pattern}/[g][j] {buffer} ...
+:bvimgrep[!] {pattern} {buffer} ...
+ Same as ":vimgrep", except that it searches the given
+ buffers. If no buffer is given, searches the current
+ buffer. Buffer can be given as buffer name (including
+ file-patterns) or number.
+
+ *:bvimgrepa* *:bvimgrepadd*
+:bvimgrepa[dd][!] /{pattern}/[g][j] {buffer} ...
+:bvimgrepa[dd][!] {pattern} {buffer} ...
+ Just like ":bvimgrep", but instead of making a new
+ list of errors thep matches are appended to the
+ current list.
+
5.2 External grep
Vim can interface with "grep" and grep-like programs (such as the GNU
diff --git a/src/buffer.c b/src/buffer.c
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2456,6 +2456,94 @@ ExpandBufnames(pat, num_file, file, opti
#endif /* FEAT_CMDL_COMPL */
#ifdef HAVE_BUFLIST_MATCH
+
+#if defined(FEAT_QUICKFIX) || defined(PROTO)
+/*
+ * Parse a list of arguments (buffer names), expand them and return in
+ * a growarray. Return FAIL or OK.
+ */
+ int
+get_buflist_exp(str, fcountp, garray)
+ char_u *str;
+ int *fcountp;
+ garray_T *garray;
+{
+ garray_T ga;
+ int i = FAIL;
+ int j;
+ int save_magic;
+ char_u *save_cpo;
+ regmatch_T regmatch;
+ buf_T *buf;
+ char_u *pat;
+ char_u *pattern = NULL;
+
+ ga_init2(garray, (int)sizeof(int), 1);
+ if ((*str == NUL || str == NULL) && ga_grow(garray, 1) == OK)
+ {
+ ((int *)(garray->ga_data))
+ [garray->ga_len++] = curbuf->b_fnum;
+ *fcountp = 1;
+ return OK;
+ }
+ else if (get_arglist(&ga, str) == FAIL)
+ return FAIL;
+
+ /* Ignore 'magic' and 'cpoptions' here to make scripts portable */
+ save_magic = p_magic;
+ p_magic = TRUE;
+ save_cpo = p_cpo;
+ p_cpo = (char_u *)"";
+
+ for (j = 0; j < ga.ga_len; j++)
+ {
+ pattern = ((char_u **)ga.ga_data)[j];
+ if (*pattern == '%' || *pattern == '#')
+ {
+ if (ga_grow(garray, 1) == OK)
+ ((int *)(garray->ga_data))
+ [garray->ga_len++] = *pattern == '*' ? curbuf->b_fnum : curwin->w_alt_fnum;
+ else
+ goto buflistend;
+ }
+ else
+ {
+ /* buffer number given */
+ if (VIM_ISDIGIT(*pattern))
+ {
+ if (ga_grow(garray, 1) == OK)
+ ((int *)(garray->ga_data))[garray->ga_len++] = getdigits(&pattern);
+ }
+ else
+ {
+ /* buffer pattern given */
+ pat = file_pat_to_reg_pat(pattern, pattern + STRLEN(pattern), NULL, FALSE);
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+ if (regmatch.regprog == NULL)
+ goto buflistend;
+ for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+ {
+ if (buflist_match(&regmatch, buf, FALSE) != NULL && ga_grow(garray, 1) == OK)
+ ((int *)(garray->ga_data))[garray->ga_len++] = buf->b_fnum;
+
+ }
+ vim_regfree(regmatch.regprog);
+ vim_free(pat);
+ }
+ }
+ }
+ *fcountp = garray->ga_len;
+ i = OK;
+
+buflistend:
+ p_magic = save_magic;
+ p_cpo = save_cpo;
+
+ ga_clear(&ga);
+ return i;
+}
+#endif
+
/*
* Check for a match on the file name for buffer "buf" with regprog "prog".
*/
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -225,6 +225,12 @@ EX(CMD_bufdo, "bufdo", ex_listdo,
EX(CMD_bunload, "bunload", ex_bunload,
BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
ADDR_LOADED_BUFFERS),
+EX(CMD_bvimgrep, "bvimgrep", ex_vimgrep,
+ BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|NEEDARG|EXTRA|NOTRLCOM|TRLBAR,
+ ADDR_LOADED_BUFFERS),
+EX(CMD_bvimgrepadd, "bvimgrepadd", ex_vimgrep,
+ BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|NEEDARG|EXTRA|NOTRLCOM|TRLBAR,
+ ADDR_LOADED_BUFFERS),
EX(CMD_bwipeout, "bwipeout", ex_bunload,
BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR,
ADDR_BUFFERS),
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2882,10 +2882,11 @@ do_one_cmd(cmdlinep, sourcing,
#ifdef FEAT_LISTCMDS
/*
* Accept buffer name. Cannot be used at the same time with a buffer
- * number. Don't do this for a user command.
+ * number. Don't do this for a user command or :bvimgrep[add]
*/
if ((ea.argt & BUFNAME) && *ea.arg != NUL && ea.addr_count == 0
- && !IS_USER_CMDIDX(ea.cmdidx))
+ && !IS_USER_CMDIDX(ea.cmdidx) && ea.cmdidx != CMD_bvimgrep
+ && ea.cmdidx != CMD_bvimgrepadd)
{
/*
* :bdelete, :bwipeout and :bunload take several arguments, separated
@@ -4105,6 +4106,8 @@ set_one_cmd_context(xp, buff)
case CMD_bdelete:
case CMD_bwipeout:
case CMD_bunload:
+ case CMD_bvimgrep:
+ case CMD_bvimgrepadd:
while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
arg = xp->xp_pattern + 1;
/*FALLTHROUGH*/
@@ -4735,6 +4738,8 @@ skip_grep_pat(eap)
if (*p != NUL && (eap->cmdidx == CMD_vimgrep || eap->cmdidx == CMD_lvimgrep
|| eap->cmdidx == CMD_vimgrepadd
|| eap->cmdidx == CMD_lvimgrepadd
+ || eap->cmdidx == CMD_bvimgrep
+ || eap->cmdidx == CMD_bvimgrepadd
|| grep_internal(eap->cmdidx)))
{
p = skip_vimgrep_pat(p, NULL, NULL);
diff --git a/src/proto/buffer.pro b/src/proto/buffer.pro
--- a/src/proto/buffer.pro
+++ b/src/proto/buffer.pro
@@ -19,6 +19,7 @@ buf_T *buflist_findname_exp __ARGS((char
buf_T *buflist_findname __ARGS((char_u *ffname));
int buflist_findpat __ARGS((char_u *pattern, char_u *pattern_end, int unlisted, int diffmode, int curtab_only));
int ExpandBufnames __ARGS((char_u *pat, int *num_file, char_u ***file, int options));
+int get_buflist_exp __ARGS((char_u *str, int *count, garray_T *ga));
buf_T *buflist_findnr __ARGS((int nr));
char_u *buflist_nr2name __ARGS((int n, int fullname, int helptail));
void get_winopts __ARGS((buf_T *buf));
diff --git a/src/proto/screen.pro b/src/proto/screen.pro
--- a/src/proto/screen.pro
+++ b/src/proto/screen.pro
@@ -13,6 +13,7 @@ int conceal_cursor_line __ARGS((win_T *w
void conceal_check_cursur_line __ARGS((void));
void update_single_line __ARGS((win_T *wp, linenr_T lnum));
void update_debug_sign __ARGS((buf_T *buf, linenr_T lnum));
+void SkipRedraw __ARGS((int enable));
void updateWindow __ARGS((win_T *wp));
void rl_mirror __ARGS((char_u *str));
void status_redraw_all __ARGS((void));
diff --git a/src/quickfix.c b/src/quickfix.c
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -3141,6 +3141,7 @@ ex_cfile(eap)
* ":vimgrepadd {pattern} file(s)"
* ":lvimgrep {pattern} file(s)"
* ":lvimgrepadd {pattern} file(s)"
+ * ":bvimgrep[add] {pattern} buffer(s)"
*/
void
ex_vimgrep(eap)
@@ -3161,7 +3162,7 @@ ex_vimgrep(eap)
long lnum;
buf_T *buf;
int duplicate_name = FALSE;
- int using_dummy;
+ int using_dummy = FALSE;
int redraw_for_dummy = FALSE;
int found_match;
buf_T *first_match_buf = NULL;
@@ -3177,8 +3178,11 @@ ex_vimgrep(eap)
char_u *dirname_start = NULL;
char_u *dirname_now = NULL;
char_u *target_dir = NULL;
+ garray_T gap;
#ifdef FEAT_AUTOCMD
char_u *au_name = NULL;
+ int bufnr = curbuf->b_fnum;
+ int do_not_switch_back = FALSE;
switch (eap->cmdidx)
{
@@ -3190,6 +3194,8 @@ ex_vimgrep(eap)
case CMD_lgrep: au_name = (char_u *)"lgrep"; break;
case CMD_grepadd: au_name = (char_u *)"grepadd"; break;
case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
+ case CMD_bvimgrep: au_name = (char_u *)"bvimgrep"; break;
+ case CMD_bvimgrepadd: au_name = (char_u *)"bvimgrepadd"; break;
default: break;
}
if (au_name != NULL)
@@ -3244,15 +3250,10 @@ ex_vimgrep(eap)
regmatch.rmm_maxcol = 0;
p = skipwhite(p);
- if (*p == NUL)
- {
- EMSG(_("E683: File name missing or invalid pattern"));
- goto theend;
- }
if ((eap->cmdidx != CMD_grepadd && eap->cmdidx != CMD_lgrepadd &&
- eap->cmdidx != CMD_vimgrepadd && eap->cmdidx != CMD_lvimgrepadd)
- || qi->qf_curlist == qi->qf_listcount)
+ eap->cmdidx != CMD_vimgrepadd && eap->cmdidx != CMD_lvimgrepadd &&
+ eap->cmdidx != CMD_bvimgrepadd) || qi->qf_curlist == qi->qf_listcount)
/* make place for a new list */
qf_new_list(qi, *eap->cmdlinep);
else if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
@@ -3262,7 +3263,18 @@ ex_vimgrep(eap)
;
/* parse the list of arguments */
- if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
+ if (eap->cmdidx == CMD_bvimgrep || eap->cmdidx == CMD_bvimgrepadd)
+ {
+ SkipRedraw(TRUE); /* do not redraw, when switching buffers */
+ if (curbuf->b_p_bh[0] == 'w' || curbuf->b_p_bh[0] == 'd' || curbuf->b_p_bh[0] == 'u')
+ do_not_switch_back = TRUE;
+ if (get_buflist_exp(p, &fcount, &gap) == FAIL)
+ {
+ ga_clear(&gap);
+ goto theend;
+ }
+ }
+ else if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
goto theend;
if (fcount == 0)
{
@@ -3288,29 +3300,56 @@ ex_vimgrep(eap)
seconds = (time_t)0;
for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
{
- fname = shorten_fname1(fnames[fi]);
- if (time(NULL) > seconds)
+ if (eap->cmdidx == CMD_bvimgrep ||
+ eap->cmdidx == CMD_bvimgrepadd)
{
- /* Display the file name every second or so, show the user we are
- * working on it. */
- seconds = time(NULL);
- msg_start();
- p = msg_strtrunc(fname, TRUE);
- if (p == NULL)
- msg_outtrans(fname);
- else
+ int result = OK;
+ buf_T *old_curbuf = curbuf;
+
+ fname = NULL;
+ using_dummy = FALSE;
+ if (gap.ga_len > 0 && curbuf->b_fnum != ((int *)gap.ga_data)[fi])
{
- msg_outtrans(p);
- vim_free(p);
+# if defined(FEAT_WINDOWS) && defined(HAS_SWAP_EXISTS_ACTION)
+ swap_exists_action = SEA_DIALOG;
+#endif
+ result = do_buffer(DOBUF_GOTO, DOBUF_FIRST, FORWARD,
+ ((int *)gap.ga_data)[fi], eap->forceit);
+# if defined(FEAT_WINDOWS) && defined(HAS_SWAP_EXISTS_ACTION)
+ handle_swap_exists(old_curbuf);
+# endif
+ if (result == FAIL)
+ break;
}
- msg_clr_eos();
- msg_didout = FALSE; /* overwrite this message */
- msg_nowait = TRUE; /* don't wait for this message */
- msg_col = 0;
- out_flush();
+ buf = curbuf;
}
-
- buf = buflist_findname_exp(fnames[fi]);
+ else
+ {
+ fname = shorten_fname1(fnames[fi]);
+ if (time(NULL) > seconds)
+ {
+ /* Display the file name every second or so, show the user we are
+ * working on it. */
+ seconds = time(NULL);
+ msg_start();
+ p = msg_strtrunc(fname, TRUE);
+ if (p == NULL)
+ msg_outtrans(fname);
+ else
+ {
+ msg_outtrans(p);
+ vim_free(p);
+ }
+ msg_clr_eos();
+ msg_didout = FALSE; /* overwrite this message */
+ msg_nowait = TRUE; /* don't wait for this message */
+ msg_col = 0;
+ out_flush();
+ }
+
+ buf = buflist_findname_exp(fnames[fi]);
+ }
+
if (buf == NULL || buf->b_ml.ml_mfp == NULL)
{
/* Remember that a buffer with this name already exists. */
@@ -3383,7 +3422,7 @@ ex_vimgrep(eap)
if (qf_add_entry(qi, &prevp,
NULL, /* dir */
fname,
- 0,
+ fname == 0 ? buf->b_fnum : 0,
ml_get_buf(buf,
regmatch.startpos[0].lnum + lnum, FALSE),
regmatch.startpos[0].lnum + lnum,
@@ -3476,7 +3515,15 @@ ex_vimgrep(eap)
}
}
- FreeWild(fcount, fnames);
+ /* switch back to original buffer, if it still exists (might have become invalid because of 'bufhidden' setting or some autocommand */
+ if ((eap->cmdidx == CMD_bvimgrep || eap->cmdidx == CMD_bvimgrepadd) &&
+ curbuf->b_fnum != bufnr && buflist_findnr(bufnr) != NULL && !do_not_switch_back)
+ (void)do_buffer(DOBUF_GOTO, DOBUF_FIRST, FORWARD, bufnr, FALSE);
+
+ if (eap->cmdidx != CMD_bvimgrep && eap->cmdidx != CMD_bvimgrepadd)
+ FreeWild(fcount, fnames);
+ else
+ ga_clear(&gap);
qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
qi->qf_lists[qi->qf_curlist].qf_ptr = qi->qf_lists[qi->qf_curlist].qf_start;
@@ -3530,6 +3577,8 @@ ex_vimgrep(eap)
}
theend:
+ if (eap->cmdidx == CMD_bvimgrep || eap->cmdidx == CMD_bvimgrepadd)
+ SkipRedraw(FALSE);
vim_free(dirname_now);
vim_free(dirname_start);
vim_free(target_dir);
diff --git a/src/screen.c b/src/screen.c
--- a/src/screen.c
+++ b/src/screen.c
@@ -939,6 +939,22 @@ update_debug_sign(buf, lnum)
}
#endif
+ void
+SkipRedraw(doit)
+ int doit;
+{
+ if (doit)
+ {
+ /* return if already busy updating */
+ if (updating_screen)
+ return;
+ update_prepare();
+ }
+ else
+ update_finish();
+}
+
+
#if defined(FEAT_GUI) || defined(PROTO)
/*
diff --git a/src/testdir/Make_amiga.mak b/src/testdir/Make_amiga.mak
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -38,6 +38,7 @@ SCRIPTS = test1.out test3.out test4.out
test104.out test105.out test106.out test107.out \
test_argument_count.out \
test_autoformat_join.out \
+ test_bvimgrep.out \
test_breakindent.out \
test_changelist.out \
test_close_count.out \
diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -37,6 +37,7 @@ SCRIPTS = test3.out test4.out test5.out
test105.out test106.out test107.out\
test_argument_count.out \
test_autoformat_join.out \
+ test_bvimgrep.out \
test_breakindent.out \
test_changelist.out \
test_close_count.out \
diff --git a/src/testdir/Make_ming.mak b/src/testdir/Make_ming.mak
--- a/src/testdir/Make_ming.mak
+++ b/src/testdir/Make_ming.mak
@@ -59,6 +59,7 @@ SCRIPTS = test3.out test4.out test5.out
test105.out test106.out test107.out \
test_argument_count.out \
test_autoformat_join.out \
+ test_bvimgrep.out \
test_breakindent.out \
test_changelist.out \
test_close_count.out \
diff --git a/src/testdir/Make_os2.mak b/src/testdir/Make_os2.mak
--- a/src/testdir/Make_os2.mak
+++ b/src/testdir/Make_os2.mak
@@ -39,6 +39,7 @@ SCRIPTS = test1.out test3.out test4.out
test105.out test106.out test107.out \
test_argument_count.out \
test_autoformat_join.out \
+ test_bvimgrep.out \
test_breakindent.out \
test_changelist.out \
test_close_count.out \
diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -98,6 +98,7 @@ SCRIPT = test1.out test2.out test3.out
test105.out test106.out test107.out \
test_argument_count.out \
test_autoformat_join.out \
+ test_bvimgrep.out \
test_breakindent.out \
test_changelist.out \
test_close_count.out \
diff --git a/src/testdir/Makefile b/src/testdir/Makefile
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -35,6 +35,7 @@ SCRIPTS = test1.out test2.out test3.out
test104.out test105.out test106.out test107.out \
test_argument_count.out \
test_autoformat_join.out \
+ test_bvimgrep.out \
test_breakindent.out \
test_changelist.out \
test_close_count.out \
diff --git a/src/testdir/test_bvimgrep.in b/src/testdir/test_bvimgrep.in
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_bvimgrep.in
@@ -0,0 +1,37 @@
+Test for bvimgrep
+
+STARTTEST
+:so small.vim
+:if exists(":bvimgrep") != 2 | e! test.ok | w! test.out | qa! | endif
+:set hidden
+:fu! Print(list)
+: for item in a:list | for val in item| $put =val|endfor|$put = '' |endfor
+:endfu
+:let a=[]
+:new
+:f foo
+:$put ='buffer: foo'
+:bvimgrep /foo/j foo
+:call add(a,[['Test1: only buffer foo'] + getqflist()])
+:new
+:f foobar
+:$put ='buffer: foobar'
+:bvimgrepadd /foo/j foo*
+:call add(a,[['Test2: buffer foo twice + buffer foobar'] + getqflist()])
+:new
+:f testfile
+:call append('$', ['test_1', 'test_2', 'test_3', 'test_4', 'test_5'])
+:bvimgrep /test_/j
+:call add(a,[['Test3: Only search current buffer '. bufname('')] + getqflist()])
+:bvimgrep /^\(test_\|buffer\|dummy\)/j *
+:call add(a,[['Test4: search all 4 buffers '] + getqflist()])
+:set nohidden
+:bvimgrep /\(test_\|foo\)/j *
+:call add(a,[['Test5: bvimgrep aborts, clears qflist'] + getqflist()])
+:1b!
+:call Print(a)
+:%w! test.out
+:qa!
+ENDTEST
+dummy text
+
diff --git a/src/testdir/test_bvimgrep.ok b/src/testdir/test_bvimgrep.ok
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_bvimgrep.ok
@@ -0,0 +1,64 @@
+Test for bvimgrep
+
+STARTTEST
+:so small.vim
+:if exists(":bvimgrep") != 2 | e! test.ok | w! test.out | qa! | endif
+:set hidden
+:fu! Print(list)
+: for item in a:list | for val in item| $put =val|endfor|$put = '' |endfor
+:endfu
+:let a=[]
+:new
+:f foo
+:$put ='buffer: foo'
+:bvimgrep /foo/j foo
+:call add(a,[['Test1: only buffer foo'] + getqflist()])
+:new
+:f foobar
+:$put ='buffer: foobar'
+:bvimgrepadd /foo/j foo*
+:call add(a,[['Test2: buffer foo twice + buffer foobar'] + getqflist()])
+:new
+:f testfile
+:call append('$', ['test_1', 'test_2', 'test_3', 'test_4', 'test_5'])
+:bvimgrep /test_/j
+:call add(a,[['Test3: Only search current buffer '. bufname('')] + getqflist()])
+:bvimgrep /^\(test_\|buffer\|dummy\)/j *
+:call add(a,[['Test4: search all 4 buffers '] + getqflist()])
+:set nohidden
+:bvimgrep /\(test_\|foo\)/j *
+:call add(a,[['Test5: bvimgrep aborts, clears qflist'] + getqflist()])
+:1b!
+:call Print(a)
+:%w! test.out
+:qa!
+ENDTEST
+dummy text
+
+Test1: only buffer foo
+{'lnum': 2, 'bufnr': 2, 'col': 9, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'buffer: foo'}
+
+Test2: buffer foo twice + buffer foobar
+{'lnum': 2, 'bufnr': 2, 'col': 9, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'buffer: foo'}
+{'lnum': 2, 'bufnr': 2, 'col': 9, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'buffer: foo'}
+{'lnum': 2, 'bufnr': 3, 'col': 9, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'buffer: foobar'}
+
+Test3: Only search current buffer testfile
+{'lnum': 2, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_1'}
+{'lnum': 3, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_2'}
+{'lnum': 4, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_3'}
+{'lnum': 5, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_4'}
+{'lnum': 6, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_5'}
+
+Test4: search all 4 buffers
+{'lnum': 36, 'bufnr': 1, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'dummy text'}
+{'lnum': 2, 'bufnr': 2, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'buffer: foo'}
+{'lnum': 2, 'bufnr': 3, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'buffer: foobar'}
+{'lnum': 2, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_1'}
+{'lnum': 3, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_2'}
+{'lnum': 4, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_3'}
+{'lnum': 5, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_4'}
+{'lnum': 6, 'bufnr': 4, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': 'test_5'}
+
+Test5: bvimgrep aborts, clears qflist
+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment