123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576 |
- if !exists('g:nerdtree_tabs_open_on_gui_startup')
- let g:nerdtree_tabs_open_on_gui_startup = 1
- endif
- if !exists('g:nerdtree_tabs_open_on_console_startup')
- let g:nerdtree_tabs_open_on_console_startup = 0
- endif
- if !exists('g:nerdtree_tabs_no_startup_for_diff')
- let g:nerdtree_tabs_no_startup_for_diff = 1
- endif
- if !exists('g:nerdtree_tabs_smart_startup_focus')
- let g:nerdtree_tabs_smart_startup_focus = 1
- endif
- if !exists('g:nerdtree_tabs_open_on_new_tab')
- let g:nerdtree_tabs_open_on_new_tab = 1
- endif
- if !exists('g:nerdtree_tabs_meaningful_tab_names')
- let g:nerdtree_tabs_meaningful_tab_names = 1
- endif
- if !exists('g:nerdtree_tabs_autoclose')
- let g:nerdtree_tabs_autoclose = 1
- endif
- if !exists('g:nerdtree_tabs_synchronize_view')
- let g:nerdtree_tabs_synchronize_view = 1
- endif
- if !exists('g:nerdtree_tabs_synchronize_focus')
- let g:nerdtree_tabs_synchronize_focus = 1
- endif
- if !exists('g:nerdtree_tabs_focus_on_files')
- let g:nerdtree_tabs_focus_on_files = 0
- endif
- if !exists('g:nerdtree_tabs_startup_cd')
- let g:nerdtree_tabs_startup_cd = 1
- endif
- noremap <silent> <script> <Plug>NERDTreeTabsOpen :call <SID>NERDTreeOpenAllTabs()
- noremap <silent> <script> <Plug>NERDTreeTabsClose :call <SID>NERDTreeCloseAllTabs()
- noremap <silent> <script> <Plug>NERDTreeTabsToggle :call <SID>NERDTreeToggleAllTabs()
- noremap <silent> <script> <Plug>NERDTreeMirrorOpen :call <SID>NERDTreeMirrorOrCreate()
- noremap <silent> <script> <Plug>NERDTreeMirrorToggle :call <SID>NERDTreeMirrorToggle()
- noremap <silent> <script> <Plug>NERDTreeSteppedOpen :call <SID>NERDTreeSteppedOpen()
- noremap <silent> <script> <Plug>NERDTreeSteppedClose :call <SID>NERDTreeSteppedClose()
- noremap <silent> <script> <Plug>NERDTreeFocusToggle :call <SID>NERDTreeFocusToggle()
- command! NERDTreeTabsOpen call <SID>NERDTreeOpenAllTabs()
- command! NERDTreeTabsClose call <SID>NERDTreeCloseAllTabs()
- command! NERDTreeTabsToggle call <SID>NERDTreeToggleAllTabs()
- command! NERDTreeMirrorOpen call <SID>NERDTreeMirrorOrCreate()
- command! NERDTreeMirrorToggle call <SID>NERDTreeMirrorToggle()
- command! NERDTreeSteppedOpen call <SID>NERDTreeSteppedOpen()
- command! NERDTreeSteppedClose call <SID>NERDTreeSteppedClose()
- command! NERDTreeFocusToggle call <SID>NERDTreeFocusToggle()
- fun! s:NERDTreeMirrorOrCreate()
- let l:nerdtree_open = s:IsNERDTreeOpenInCurrentTab()
-
- if !l:nerdtree_open
- let l:previous_winnr = winnr("$")
- silent NERDTreeMirror
-
-
- if l:previous_winnr == winnr("$")
- silent NERDTreeToggle
- endif
- endif
- endfun
- fun! s:NERDTreeMirrorToggle()
- let l:nerdtree_open = s:IsNERDTreeOpenInCurrentTab()
- if l:nerdtree_open
- silent NERDTreeClose
- else
- call s:NERDTreeMirrorOrCreate()
- endif
- endfun
- fun! s:NERDTreeOpenAllTabs()
- let s:nerdtree_globally_active = 1
-
- let l:current_tab = tabpagenr()
- tabdo call s:NERDTreeMirrorOrCreate()
- exe 'tabn ' . l:current_tab
- endfun
- fun! s:NERDTreeCloseAllTabs()
- let s:nerdtree_globally_active = 0
-
- let l:current_tab = tabpagenr()
- tabdo silent NERDTreeClose
- exe 'tabn ' . l:current_tab
- endfun
- fun! s:NERDTreeToggleAllTabs()
- let l:nerdtree_open = s:IsNERDTreeOpenInCurrentTab()
- let s:disable_handlers_for_tabdo = 1
- if l:nerdtree_open
- call s:NERDTreeCloseAllTabs()
- else
- call s:NERDTreeOpenAllTabs()
-
- if exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1
- exe bufwinnr(t:NERDTreeBufName) . "wincmd w"
- endif
- endif
- let s:disable_handlers_for_tabdo = 0
- endfun
- fun! s:NERDTreeSteppedOpen()
- if !s:IsCurrentWindowNERDTree()
- if s:IsNERDTreeOpenInCurrentTab()
- call s:NERDTreeFocus()
- else
- call s:NERDTreeMirrorOrCreate()
- endif
- endif
- endfun
- fun! s:NERDTreeSteppedClose()
- if s:IsCurrentWindowNERDTree()
- call s:NERDTreeUnfocus()
- else
- let l:nerdtree_open = s:IsNERDTreeOpenInCurrentTab()
- if l:nerdtree_open
- silent NERDTreeClose
- endif
- endif
- endfun
- fun! s:NERDTreeFocusToggle()
- let s:disable_handlers_for_tabdo = 1
- if s:IsCurrentWindowNERDTree()
- call s:NERDTreeUnfocus()
- else
- if !s:IsNERDTreeOpenInCurrentTab()
- call s:NERDTreeOpenAllTabs()
- endif
- call s:NERDTreeFocus()
- endif
- let s:disable_handlers_for_tabdo = 0
- endfun
- fun! s:NERDTreeFocus()
- if !s:IsCurrentWindowNERDTree() && exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1
- exe bufwinnr(t:NERDTreeBufName) . "wincmd w"
- endif
- endfun
- fun! s:NERDTreeUnfocus()
-
-
- let t:NERDTreeTabLastWindow = winnr()
- if s:IsCurrentWindowNERDTree()
- let l:winNum = s:NextNormalWindow()
- if l:winNum != -1
- exec l:winNum.'wincmd w'
- else
- wincmd w
- endif
- endif
- endfun
- fun! s:NERDTreeRestoreFocus()
- if g:nerdtree_tabs_synchronize_focus
- if s:is_nerdtree_globally_focused
- call s:NERDTreeFocus()
- elseif exists("t:NERDTreeTabLastWindow") && exists("t:NERDTreeBufName") && t:NERDTreeTabLastWindow != bufwinnr(t:NERDTreeBufName)
- exe t:NERDTreeTabLastWindow . "wincmd w"
- endif
- elseif exists("t:NERDTreeTabLastWindow")
- exe t:NERDTreeTabLastWindow . "wincmd w"
- endif
- endfun
- fun! s:SaveGlobalFocus()
- let s:is_nerdtree_globally_focused = s:IsCurrentWindowNERDTree()
- endfun
- fun! s:IfFocusOnStartup()
- return strlen(bufname('$')) == 0 || !getbufvar('$', '&modifiable')
- endfun
- fun! s:NextNormalWindow()
- let l:i = 1
- while(l:i <= winnr('$'))
- let l:buf = winbufnr(l:i)
-
- if buflisted(l:buf) == 0
- let l:i = l:i + 1
- continue
- endif
-
- if getbufvar(l:buf, '&modifiable') != 1
- let l:i = l:i + 1
- continue
- endif
-
- if empty(getbufvar(l:buf, "&buftype")) != 1
- let l:i = l:i + 1
- continue
- endif
- return l:i
- endwhile
- return -1
- endfun
- fun! s:CloseIfOnlyNerdTreeLeft()
- if exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1 && winnr("$") == 1
- q
- endif
- endfun
- fun! s:IsCurrentWindowNERDTree()
- return exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) == winnr()
- endfun
- fun! s:IsNERDTreeOpenInCurrentTab()
- return exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1
- endfun
- fun! s:IsNERDTreePresentInCurrentTab()
- return exists("t:NERDTreeBufName")
- endfun
- fun! s:SaveNERDTreeViewIfPossible()
- if exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) == winnr()
-
- let s:nerdtree_view = winsaveview()
-
- let s:nerdtree_width = winwidth(winnr())
-
-
- let s:nerdtree_buffer = bufname("%")
- endif
- endfun
- fun! s:RestoreNERDTreeViewIfPossible()
-
-
- let l:view_state_saved = exists('s:nerdtree_view') && exists('s:nerdtree_width')
- if s:IsNERDTreeOpenInCurrentTab() && l:view_state_saved
- let l:current_winnr = winnr()
- let l:nerdtree_winnr = bufwinnr(t:NERDTreeBufName)
-
- exe l:nerdtree_winnr . "wincmd w"
-
- if exists('s:nerdtree_buffer') && t:NERDTreeBufName != s:nerdtree_buffer
- silent NERDTreeClose
- silent NERDTreeMirror
- endif
-
- call winrestview(s:nerdtree_view)
- exe "vertical resize " . s:nerdtree_width
-
- exe l:current_winnr . "wincmd w"
- endif
- endfun
- fun! s:LoadPlugin()
- if exists('g:nerdtree_tabs_loaded')
- return
- endif
- let g:NERDTreeHijackNetrw = 0
- let s:disable_handlers_for_tabdo = 0
-
-
- if !exists('s:nerdtree_globally_active')
- let s:nerdtree_globally_active = 0
- endif
-
-
- if !exists('s:is_nerdtree_globally_focused')
- call s:SaveGlobalFocus()
- end
- augroup NERDTreeTabs
- autocmd!
- autocmd VimEnter * call <SID>VimEnterHandler()
- autocmd TabEnter * call <SID>TabEnterHandler()
- autocmd TabLeave * call <SID>TabLeaveHandler()
- autocmd WinEnter * call <SID>WinEnterHandler()
- autocmd WinLeave * call <SID>WinLeaveHandler()
- autocmd BufWinEnter * call <SID>BufWinEnterHandler()
- augroup END
- let g:nerdtree_tabs_loaded = 1
- endfun
- fun! s:VimEnterHandler()
-
- if g:nerdtree_tabs_startup_cd && isdirectory(argv(0))
- exe 'cd ' . escape(argv(0), '\ ')
- endif
- let l:open_nerd_tree_on_startup = (g:nerdtree_tabs_open_on_console_startup && !has('gui_running')) ||
- \ (g:nerdtree_tabs_open_on_gui_startup && has('gui_running'))
- if g:nerdtree_tabs_no_startup_for_diff && &diff
- let l:open_nerd_tree_on_startup = 0
- endif
-
- let s:nerdtree_globally_active = l:open_nerd_tree_on_startup
- if l:open_nerd_tree_on_startup
- let l:focus_file = !s:IfFocusOnStartup()
- let l:main_bufnr = bufnr('%')
- if !s:IsNERDTreePresentInCurrentTab()
- call s:NERDTreeOpenAllTabs()
- endif
- if (l:focus_file && g:nerdtree_tabs_smart_startup_focus == 1) || g:nerdtree_tabs_smart_startup_focus == 2
- exe bufwinnr(l:main_bufnr) . "wincmd w"
- endif
- endif
- endfun
- let s:NewTabCreated = 0
- fun! s:TabEnterHandler()
- if s:disable_handlers_for_tabdo
- return
- endif
- if g:nerdtree_tabs_open_on_new_tab && s:nerdtree_globally_active && !s:IsNERDTreeOpenInCurrentTab()
- call s:NERDTreeMirrorOrCreate()
-
- wincmd p
-
- let s:NewTabCreated = 1
- endif
- if g:nerdtree_tabs_synchronize_view
- call s:RestoreNERDTreeViewIfPossible()
- endif
- if g:nerdtree_tabs_focus_on_files
- call s:NERDTreeUnfocus()
-
- elseif !s:NewTabCreated
- call s:NERDTreeRestoreFocus()
- endif
- endfun
- fun! s:TabLeaveHandler()
- if g:nerdtree_tabs_meaningful_tab_names
- call s:SaveGlobalFocus()
- call s:NERDTreeUnfocus()
- endif
- endfun
- fun! s:WinEnterHandler()
- if s:disable_handlers_for_tabdo
- return
- endif
- if g:nerdtree_tabs_autoclose
- call s:CloseIfOnlyNerdTreeLeft()
- endif
- endfun
- fun! s:WinLeaveHandler()
- if s:disable_handlers_for_tabdo
- return
- endif
- if g:nerdtree_tabs_synchronize_view
- call s:SaveNERDTreeViewIfPossible()
- endif
- endfun
- fun! s:BufWinEnterHandler()
- if s:NewTabCreated
-
- let s:NewTabCreated = 0
-
- if !g:nerdtree_tabs_focus_on_files
- call s:NERDTreeRestoreFocus()
- endif
- endif
- endfun
- call s:LoadPlugin()
|