25b80b8a16
Add the NERDTreeCreator class. Stick all functions related to creating a primary/secondary/mirror nerdtree in there. We may break this down further in the future, but this is a good starting point. Make some of the interface binding functions in autoload/nerdtree public. This is needed since we are accessing some of them from NERDTreeCreator. Should be temporary until we get some kind of proper interface binding system set up.
219 lines
8.4 KiB
VimL
219 lines
8.4 KiB
VimL
" ============================================================================
|
|
" File: NERD_tree.vim
|
|
" Description: vim global plugin that provides a nice tree explorer
|
|
" Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
|
" Last Change: 28 December, 2011
|
|
" License: This program is free software. It comes without any warranty,
|
|
" to the extent permitted by applicable law. You can redistribute
|
|
" it and/or modify it under the terms of the Do What The Fuck You
|
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
|
"
|
|
" ============================================================================
|
|
"
|
|
" SECTION: Script init stuff {{{1
|
|
"============================================================
|
|
if exists("loaded_nerd_tree")
|
|
finish
|
|
endif
|
|
if v:version < 700
|
|
echoerr "NERDTree: this plugin requires vim >= 7. DOWNLOAD IT! You'll thank me later!"
|
|
finish
|
|
endif
|
|
let loaded_nerd_tree = 1
|
|
|
|
"for line continuation - i.e dont want C in &cpo
|
|
let s:old_cpo = &cpo
|
|
set cpo&vim
|
|
|
|
"Function: s:initVariable() function {{{2
|
|
"This function is used to initialise a given variable to a given value. The
|
|
"variable is only initialised if it does not exist prior
|
|
"
|
|
"Args:
|
|
"var: the name of the var to be initialised
|
|
"value: the value to initialise var to
|
|
"
|
|
"Returns:
|
|
"1 if the var is set, 0 otherwise
|
|
function! s:initVariable(var, value)
|
|
if !exists(a:var)
|
|
exec 'let ' . a:var . ' = ' . "'" . substitute(a:value, "'", "''", "g") . "'"
|
|
return 1
|
|
endif
|
|
return 0
|
|
endfunction
|
|
|
|
"SECTION: Init variable calls and other random constants {{{2
|
|
call s:initVariable("g:NERDChristmasTree", 1)
|
|
call s:initVariable("g:NERDTreeAutoCenter", 1)
|
|
call s:initVariable("g:NERDTreeAutoCenterThreshold", 3)
|
|
call s:initVariable("g:NERDTreeCaseSensitiveSort", 0)
|
|
call s:initVariable("g:NERDTreeChDirMode", 0)
|
|
call s:initVariable("g:NERDTreeMinimalUI", 0)
|
|
if !exists("g:NERDTreeIgnore")
|
|
let g:NERDTreeIgnore = ['\~$']
|
|
endif
|
|
call s:initVariable("g:NERDTreeBookmarksFile", expand('$HOME') . '/.NERDTreeBookmarks')
|
|
call s:initVariable("g:NERDTreeHighlightCursorline", 1)
|
|
call s:initVariable("g:NERDTreeHijackNetrw", 1)
|
|
call s:initVariable("g:NERDTreeMouseMode", 1)
|
|
call s:initVariable("g:NERDTreeNotificationThreshold", 100)
|
|
call s:initVariable("g:NERDTreeQuitOnOpen", 0)
|
|
call s:initVariable("g:NERDTreeShowBookmarks", 0)
|
|
call s:initVariable("g:NERDTreeShowFiles", 1)
|
|
call s:initVariable("g:NERDTreeShowHidden", 0)
|
|
call s:initVariable("g:NERDTreeShowLineNumbers", 0)
|
|
call s:initVariable("g:NERDTreeSortDirs", 1)
|
|
call s:initVariable("g:NERDTreeDirArrows", !nerdtree#runningWindows())
|
|
call s:initVariable("g:NERDTreeCasadeOpenSingleChildDir", 1)
|
|
|
|
if !exists("g:NERDTreeSortOrder")
|
|
let g:NERDTreeSortOrder = ['\/$', '*', '\.swp$', '\.bak$', '\~$']
|
|
else
|
|
"if there isnt a * in the sort sequence then add one
|
|
if count(g:NERDTreeSortOrder, '*') < 1
|
|
call add(g:NERDTreeSortOrder, '*')
|
|
endif
|
|
endif
|
|
|
|
if !exists('g:NERDTreeStatusline')
|
|
|
|
"the exists() crap here is a hack to stop vim spazzing out when
|
|
"loading a session that was created with an open nerd tree. It spazzes
|
|
"because it doesnt store b:NERDTreeRoot (its a b: var, and its a hash)
|
|
let g:NERDTreeStatusline = "%{exists('b:NERDTreeRoot')?b:NERDTreeRoot.path.str():''}"
|
|
|
|
endif
|
|
call s:initVariable("g:NERDTreeWinPos", "left")
|
|
call s:initVariable("g:NERDTreeWinSize", 31)
|
|
|
|
"init the shell commands that will be used to copy nodes, and remove dir trees
|
|
"
|
|
"Note: the space after the command is important
|
|
if nerdtree#runningWindows()
|
|
call s:initVariable("g:NERDTreeRemoveDirCmd", 'rmdir /s /q ')
|
|
else
|
|
call s:initVariable("g:NERDTreeRemoveDirCmd", 'rm -rf ')
|
|
call s:initVariable("g:NERDTreeCopyCmd", 'cp -r ')
|
|
endif
|
|
|
|
|
|
"SECTION: Init variable calls for key mappings {{{2
|
|
call s:initVariable("g:NERDTreeMapActivateNode", "o")
|
|
call s:initVariable("g:NERDTreeMapChangeRoot", "C")
|
|
call s:initVariable("g:NERDTreeMapChdir", "cd")
|
|
call s:initVariable("g:NERDTreeMapCloseChildren", "X")
|
|
call s:initVariable("g:NERDTreeMapCloseDir", "x")
|
|
call s:initVariable("g:NERDTreeMapDeleteBookmark", "D")
|
|
call s:initVariable("g:NERDTreeMapMenu", "m")
|
|
call s:initVariable("g:NERDTreeMapHelp", "?")
|
|
call s:initVariable("g:NERDTreeMapJumpFirstChild", "K")
|
|
call s:initVariable("g:NERDTreeMapJumpLastChild", "J")
|
|
call s:initVariable("g:NERDTreeMapJumpNextSibling", "<C-j>")
|
|
call s:initVariable("g:NERDTreeMapJumpParent", "p")
|
|
call s:initVariable("g:NERDTreeMapJumpPrevSibling", "<C-k>")
|
|
call s:initVariable("g:NERDTreeMapJumpRoot", "P")
|
|
call s:initVariable("g:NERDTreeMapOpenExpl", "e")
|
|
call s:initVariable("g:NERDTreeMapOpenInTab", "t")
|
|
call s:initVariable("g:NERDTreeMapOpenInTabSilent", "T")
|
|
call s:initVariable("g:NERDTreeMapOpenRecursively", "O")
|
|
call s:initVariable("g:NERDTreeMapOpenSplit", "i")
|
|
call s:initVariable("g:NERDTreeMapOpenVSplit", "s")
|
|
call s:initVariable("g:NERDTreeMapPreview", "g" . NERDTreeMapActivateNode)
|
|
call s:initVariable("g:NERDTreeMapPreviewSplit", "g" . NERDTreeMapOpenSplit)
|
|
call s:initVariable("g:NERDTreeMapPreviewVSplit", "g" . NERDTreeMapOpenVSplit)
|
|
call s:initVariable("g:NERDTreeMapQuit", "q")
|
|
call s:initVariable("g:NERDTreeMapRefresh", "r")
|
|
call s:initVariable("g:NERDTreeMapRefreshRoot", "R")
|
|
call s:initVariable("g:NERDTreeMapToggleBookmarks", "B")
|
|
call s:initVariable("g:NERDTreeMapToggleFiles", "F")
|
|
call s:initVariable("g:NERDTreeMapToggleFilters", "f")
|
|
call s:initVariable("g:NERDTreeMapToggleHidden", "I")
|
|
call s:initVariable("g:NERDTreeMapToggleZoom", "A")
|
|
call s:initVariable("g:NERDTreeMapUpdir", "u")
|
|
call s:initVariable("g:NERDTreeMapUpdirKeepOpen", "U")
|
|
call s:initVariable("g:NERDTreeMapCWD", "CD")
|
|
|
|
"SECTION: Load class files{{{2
|
|
runtime plugin/nerdtree/path.vim
|
|
runtime plugin/nerdtree/menu_controller.vim
|
|
runtime plugin/nerdtree/menu_item.vim
|
|
runtime plugin/nerdtree/key_map.vim
|
|
runtime plugin/nerdtree/bookmark.vim
|
|
runtime plugin/nerdtree/tree_file_node.vim
|
|
runtime plugin/nerdtree/tree_dir_node.vim
|
|
runtime plugin/nerdtree/opener.vim
|
|
runtime plugin/nerdtree/creator.vim
|
|
|
|
" SECTION: Commands {{{1
|
|
"============================================================
|
|
"init the command that users start the nerd tree with
|
|
command! -n=? -complete=dir -bar NERDTree :call g:NERDTreeCreator.New().createPrimary('<args>')
|
|
command! -n=? -complete=dir -bar NERDTreeToggle :call g:NERDTreeCreator.New().togglePrimary('<args>')
|
|
command! -n=0 -bar NERDTreeClose :call nerdtree#closeTreeIfOpen()
|
|
command! -n=1 -complete=customlist,nerdtree#completeBookmarks -bar NERDTreeFromBookmark call g:NERDTreeCreator.New().createPrimary('<args>')
|
|
command! -n=0 -bar NERDTreeMirror call g:NERDTreeCreator.New().createMirror()
|
|
command! -n=0 -bar NERDTreeFind call nerdtree#findAndRevealPath()
|
|
command! -n=0 -bar NERDTreeFocus call NERDTreeFocus()
|
|
command! -n=0 -bar NERDTreeCWD call NERDTreeCWD()
|
|
" SECTION: Auto commands {{{1
|
|
"============================================================
|
|
augroup NERDTree
|
|
"Save the cursor position whenever we close the nerd tree
|
|
exec "autocmd BufWinLeave ". nerdtree#bufNamePrefix() ."* call nerdtree#saveScreenState()"
|
|
|
|
"disallow insert mode in the NERDTree
|
|
exec "autocmd BufEnter ". nerdtree#bufNamePrefix() ."* stopinsert"
|
|
augroup END
|
|
|
|
if g:NERDTreeHijackNetrw
|
|
augroup NERDTreeHijackNetrw
|
|
autocmd VimEnter * silent! autocmd! FileExplorer
|
|
au BufEnter,VimEnter * call nerdtree#checkForBrowse(expand("<amatch>"))
|
|
augroup END
|
|
endif
|
|
|
|
" SECTION: Public API {{{1
|
|
"============================================================
|
|
function! NERDTreeAddMenuItem(options)
|
|
call g:NERDTreeMenuItem.Create(a:options)
|
|
endfunction
|
|
|
|
function! NERDTreeAddMenuSeparator(...)
|
|
let opts = a:0 ? a:1 : {}
|
|
call g:NERDTreeMenuItem.CreateSeparator(opts)
|
|
endfunction
|
|
|
|
function! NERDTreeAddSubmenu(options)
|
|
return g:NERDTreeMenuItem.Create(a:options)
|
|
endfunction
|
|
|
|
function! NERDTreeAddKeyMap(options)
|
|
call g:NERDTreeKeyMap.Create(a:options)
|
|
endfunction
|
|
|
|
function! NERDTreeRender()
|
|
call nerdtree#renderView()
|
|
endfunction
|
|
|
|
function! NERDTreeFocus()
|
|
if nerdtree#isTreeOpen()
|
|
call nerdtree#putCursorInTreeWin()
|
|
else
|
|
call g:NERDTreeCreator.New().togglePrimary("")
|
|
endif
|
|
endfunction
|
|
|
|
function! NERDTreeCWD()
|
|
call NERDTreeFocus()
|
|
call nerdtree#chRootCwd()
|
|
endfunction
|
|
" SECTION: Post Source Actions {{{1
|
|
call nerdtree#postSourceActions()
|
|
|
|
"reset &cpo back to users setting
|
|
let &cpo = s:old_cpo
|
|
|
|
" vim: set sw=4 sts=4 et fdm=marker:
|