Hello,
Apologies if this email bounces several times, it is my first time using
googlegroups. And I am struggling with their we interface.
I believe I found a bug in the runtime/autoload/netrw.vim script (the
path is based on the repository structure). Since `netrw` is a script
originally by DrChip he is also included in the email.
The issue happens when I open Vim with the following configuration
(.vimrc):
" 3 is tree listing
let g:netrw_liststyle=3
let g:netrw_chgwin=2
let g:netrw_winsize=22
After opening Vim I perform:
:Lexplore
To open `netrw` and finally press `r` to reorder the tree listing. I
then use `:buffers!` to look at the hidden buffers created and see this:
1 #a "[No Name]" line 1
2u h + "NetrwTreeListing 1" line 1
4u%a- "NetrwTreeListing 2" line 8
5u "NetrwTreeListing" line 1
Buffer no. 2 is marked as modified which makes Vim write the file if I
perform `:wall`. The same happens with the `R` (rename) and `D`
(delete) commands.
After a while I end with dozens of `NetrwTreeListing *` files in the
current directory (I use `:wall` often).
This does not happen if I change `g:netrw_liststyle` to any other value,
i.e. the bug is specific to the tree listing.
I have seen this behaviour using the `netrw.vim` script shipped with Vim:
https://github.com/vim/vim/blob/master/runtime/autoload/netrw.vim
And also within the `netrw.vim` script available in the Vimball on
DrChip's page:
http://www.drchip.org/astronaut/vim/#NETRW
The investigation into this bug sprouted from a question on the vim
stack exchange:
http://vi.stackexchange.com/questions/8839/how-i-configure-vim-for-use-with-netrw
------
I believe I have tracked the bug and a patch is attached. Although I
believe that my solution is ugly and not the best one by far. I only
learned Vimscript some two month ago.
In the routine `s:NetrwRefresh(islocal,dirname)` I found that commenting
the following lines stopped the modified buffer from being generated:
sil! NetrwKeepj %d _
if a:islocal
NetrwKeepj call netrw#LocalBrowseCheck(a:dirname)
else
NetrwKeepj call s:NetrwBrowse(a:islocal,a:dirname)
endif
Therefore I managed to come up with the following solution:
sil! NetrwKeepj %d _
setl nomod
if a:islocal
NetrwKeepj call netrw#LocalBrowseCheck(a:dirname)
setl nomod
else
NetrwKeepj call s:NetrwBrowse(a:islocal,a:dirname)
setl nomod
endif
I have tested it, and the buffer is now correctly generated but the
modified flag is not set anymore. In essence, now all `NetrwTreeLisitng
*` buffers remain in unmodified state and are not written when I call
`:wall`.
(Adding a single `setl nomod` after the `endif` does not appear to
work.)
The patch attached contains this exact solution. It works. Yet, I
repeat, I'm not confident in my skills at editing Vimscript, and the
existence of a better solution is very likely.
Can I ask for your input on this change?
Thanks,
--
Mike Grochmal
key ID 0xC840C4F6
--
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.
--- old/autoload/netrw.vim 2016-07-17 21:32:34.727523414 +0100
+++ new/autoload/netrw.vim 2016-07-17 21:31:27.978189763 +0100
@@ -8499,10 +8500,13 @@
" call Decho("win#".winnr().": ".winheight(0)."x".winwidth(0)."
curfile<".expand("%").">",'~'.expand("<slnum>"))
" call Decho("clearing buffer prior to refresh",'~'.expand("<slnum>"))
sil! NetrwKeepj %d _
+ setl nomod
if a:islocal
NetrwKeepj call netrw#LocalBrowseCheck(a:dirname)
+ setl nomod
else
NetrwKeepj call s:NetrwBrowse(a:islocal,a:dirname)
+ setl nomod
endif
" restore position