Greetings, I have noticed and fixed a small bug with the man.vim plugin. To reproduce:
1. vim --clean 2. :set hidden 3. :runtime ftplugin/man.vim 4. :ls 5. :Man vim 6. :q 7. :Man vim 8. :ls Notice now that there is an additional listed buffer created for no reason. I have written an automated test for this issue that currently fails. The test is attached. Notice in the changes to the test script that I added "unlet g:ft_man_open_mode" to the first test. This variable was polluting the later tests so that they wouldn't run properly (they would always see this as "tab" unless it was reset). The patch that fixes these problems is also attached. Essentially, my change avoids running ":new" without an argument which will create a superfluous, empty buffer. All existing tests continue to pass. Thanks, Jason Franklin -- -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/20bf9aaaf5ed0f5263e59134172aa7fe683e2257.camel%40elitemail.org. For more options, visit https://groups.google.com/d/optout.
diff --git a/runtime/ftplugin/man.vim b/runtime/ftplugin/man.vim index 87773ed27..f858bcf27 100644 --- a/runtime/ftplugin/man.vim +++ b/runtime/ftplugin/man.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: man " Maintainer: SungHyun Nam <gow...@gmail.com> -" Last Change: 2019 Jan 22 +" Last Change: 2019 Jun 19 " To make the ":Man" command available before editing a manual page, source " this script from your startup vimrc file. @@ -143,6 +143,8 @@ func <SID>GetPage(cmdmods, ...) exec "let s:man_tag_col_".s:man_tag_depth." = ".col(".") let s:man_tag_depth = s:man_tag_depth + 1 + let open_cmd = 'edit' + " Use an existing "man" window if it exists, otherwise open a new one. if &filetype != "man" let thiswin = winnr() @@ -161,24 +163,22 @@ func <SID>GetPage(cmdmods, ...) endif if &filetype != "man" if exists("g:ft_man_open_mode") - if g:ft_man_open_mode == "vert" - vnew - elseif g:ft_man_open_mode == "tab" - tabnew + if g:ft_man_open_mode == 'vert' + let open_cmd = 'vsplit' + elseif g:ft_man_open_mode == 'tab' + let open_cmd = 'tabedit' else - new + let open_cmd = 'split' endif else - if a:cmdmods != '' - exe a:cmdmods . ' new' - else - new - endif + let open_cmd = a:cmdmods . ' split' endif setl nonu fdc=0 endif endif - silent exec "edit $HOME/".page.".".sect."~" + + silent execute open_cmd . " $HOME/" . page . '.' . sect . '~' + " Avoid warning for editing the dummy file twice setl buftype=nofile noswapfile
diff --git a/src/testdir/test_man.vim b/src/testdir/test_man.vim index 1485ec321..b1cb982a1 100644 --- a/src/testdir/test_man.vim +++ b/src/testdir/test_man.vim @@ -46,6 +46,8 @@ function Test_g_ft_man_open_mode() call assert_equal(2, tabpagenr('$')) call assert_equal(2, tabpagenr()) q + + unlet g:ft_man_open_mode endfunction function Test_nomodifiable() @@ -58,3 +60,29 @@ function Test_nomodifiable() call assert_false(&l:modifiable) q endfunction + +function Test_buffer_count_hidden() + %bw! + set hidden + + call assert_equal(1, len(getbufinfo())) + + let wincnt = winnr('$') + Man vim + if wincnt == winnr('$') + " Vim manual page cannot be found. + return + endif + + call assert_equal(1, len(getbufinfo({'buflisted':1}))) + call assert_equal(2, len(getbufinfo())) + q + + Man vim + + call assert_equal(1, len(getbufinfo({'buflisted':1}))) + call assert_equal(2, len(getbufinfo())) + q + + set hidden& +endfunction