Hi Bram and list,

How to reproduce:
- Start Vanilla Vim edit xx
  $ vim -Nu NONE xx
- Split verticaly and create window for empty buffer.
  :vnew
- Jump to a such window or create new tabpage. Actually, already xx exists, it 
jumps to that window.
  :tab drop xx

Expected behavior:
- Jumps to xx window. because xx already exists.

Actual behavior:
- Create a new tabpage unexpectedly.

NOTE:
When `:new` is used instead of `:vnew`, it will be the expected behavior.

Investigation result:
do_arg_all()'s 3rd argument `keep_tabs` is false that means for mainly `:all` 
command.
And...
[src/buffer.c]
4860             if (buf->b_ffname == NULL
4861                     || (!keep_tabs && (buf->b_nwindows > 1
4862                             || wp->w_width != Columns)))

Also `wp->w_width != Columns` should for only `!keep_tabs` (:all command).

I wrote a patch contained a test.
Check and include it please.

BTW, the following description(at L4846) does not seem to be written in the 
document of `:all`.
[src/buffer.c]
4844     /*
4845      * Try closing all windows that are not in the argument list.
4846      * Also close windows that are not full width;

Add to a document? or remove a code?

--
Best regards,
Hirohito Higashi (a.k.a. h_east)

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
diff --git a/src/buffer.c b/src/buffer.c
index e5d2dde..e77fc04 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -4858,8 +4858,8 @@ do_arg_all(
 	    wpnext = wp->w_next;
 	    buf = wp->w_buffer;
 	    if (buf->b_ffname == NULL
-		    || (!keep_tabs && buf->b_nwindows > 1)
-		    || wp->w_width != Columns)
+		    || (!keep_tabs && (buf->b_nwindows > 1
+			    || wp->w_width != Columns)))
 		i = opened_len;
 	    else
 	    {
diff --git a/src/testdir/test_tabpage.vim b/src/testdir/test_tabpage.vim
index 3f69fb9..1720107 100644
--- a/src/testdir/test_tabpage.vim
+++ b/src/testdir/test_tabpage.vim
@@ -65,6 +65,15 @@ function Test_tabpage()
     call assert_true(tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1)
     tabclose
     q
+    "
+    "
+    " Test for ":tab drop vertical-split-window" to jump test1 buffer
+    tabedit test1
+    vnew
+    tabfirst
+    tab drop test1
+    call assert_equal([2, 2, 2, 2], [tabpagenr('$'), tabpagenr(), tabpagewinnr(2, '$'), tabpagewinnr(2)])
+    1tabonly
   endif
   "
   "

Raspunde prin e-mail lui