@@ -15,6 +15,11 @@ if exists("g:loaded_nerdtree_fs_menu")
15
15
endif
16
16
let g: loaded_nerdtree_fs_menu = 1
17
17
18
+ " Automatically delete the buffer after deleting or renaming a file
19
+ if ! exists (" g:NERDTreeAutoDeleteBuffer" )
20
+ let g: NERDTreeAutoDeleteBuffer = 0
21
+ endif
22
+
18
23
call NERDTreeAddMenuItem ({' text' : ' (a)dd a childnode' , ' shortcut' : ' a' , ' callback' : ' NERDTreeAddNode' })
19
24
call NERDTreeAddMenuItem ({' text' : ' (m)ove the current node' , ' shortcut' : ' m' , ' callback' : ' NERDTreeMoveNode' })
20
25
call NERDTreeAddMenuItem ({' text' : ' (d)elete the current node' , ' shortcut' : ' d' , ' callback' : ' NERDTreeDeleteNode' })
@@ -52,11 +57,44 @@ endfunction
52
57
" del the buffer
53
58
function ! s: promptToDelBuffer (bufnum, msg)
54
59
echo a: msg
55
- if nr2char (getchar ()) == # ' y'
56
- exec " silent bdelete! " . a: bufnum
60
+ if g: NERDTreeAutoDeleteBuffer || nr2char (getchar ()) == # ' y'
61
+ " 1. ensure that all windows which display the just deleted filename
62
+ " now display an empty buffer (so a layout is preserved).
63
+ " Is not it better to close single tabs with this file only ?
64
+ let s: originalTabNumber = tabpagenr ()
65
+ let s: originalWindowNumber = winnr ()
66
+ exec " tabdo windo if winbufnr(0) == " . a: bufnum . " | exec ':enew! ' | endif"
67
+ exec " tabnext " . s: originalTabNumber
68
+ exec s: originalWindowNumber . " wincmd w"
69
+ " 3. We don't need a previous buffer anymore
70
+ exec " bwipeout! " . a: bufnum
57
71
endif
58
72
endfunction
59
73
74
+ " FUNCTION: s:promptToRenameBuffer(bufnum, msg){{{1
75
+ " prints out the given msg and, if the user responds by pushing 'y' then the
76
+ " buffer with the given bufnum is replaced with a new one
77
+ "
78
+ " Args:
79
+ " bufnum: the buffer that may be deleted
80
+ " msg: a message that will be echoed to the user asking them if they wish to
81
+ " del the buffer
82
+ function ! s: promptToRenameBuffer (bufnum, msg, newFileName)
83
+ echo a: msg
84
+ if g: NERDTreeAutoDeleteBuffer || nr2char (getchar ()) == # ' y'
85
+ " 1. ensure that a new buffer is loaded
86
+ exec " badd " . a: newFileName
87
+ " 2. ensure that all windows which display the just deleted filename
88
+ " display a buffer for a new filename.
89
+ let s: originalTabNumber = tabpagenr ()
90
+ let s: originalWindowNumber = winnr ()
91
+ exec " tabdo windo if winbufnr(0) == " . a: bufnum . " | exec ':e! " . a: newFileName . " ' | endif"
92
+ exec " tabnext " . s: originalTabNumber
93
+ exec s: originalWindowNumber . " wincmd w"
94
+ " 3. We don't need a previous buffer anymore
95
+ exec " bwipeout! " . a: bufnum
96
+ endif
97
+ endfunction
60
98
" FUNCTION: NERDTreeAddNode(){{{1
61
99
function ! NERDTreeAddNode ()
62
100
let curDirNode = g: NERDTreeDirNode .GetSelected ()
@@ -108,8 +146,8 @@ function! NERDTreeMoveNode()
108
146
" if the node is open in a buffer, ask the user if they want to
109
147
" close that buffer
110
148
if bufnum != -1
111
- let prompt = " \n Node renamed.\n\n The old file is open in buffer " . bufnum . (bufwinnr (bufnum) == # -1 ? " (hidden)" : " " ) ." . Delete this buffer? (yN)"
112
- call s: promptToDelBuffer (bufnum, prompt )
149
+ let prompt = " \n Node renamed.\n\n The old file is open in buffer " . bufnum . (bufwinnr (bufnum) == # -1 ? " (hidden)" : " " ) ." . Replace this buffer with a new file ? (yN)"
150
+ call s: promptToRenameBuffer (bufnum, prompt , newNodePath )
113
151
endif
114
152
115
153
call curNode.putCursorHere (1 , 0 )
0 commit comments