nerdtree

A tree explorer plugin for vim.
Index Commits Files Refs
plugin/NERD_tree.vim (11099B)
   1 " ============================================================================
   2 " File:        NERD_tree.vim
   3 " Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
   4 " License:     This program is free software. It comes without any warranty,
   5 "              to the extent permitted by applicable law. You can redistribute
   6 "              it and/or modify it under the terms of the Do What The Fuck You
   7 "              Want To Public License, Version 2, as published by Sam Hocevar.
   8 "              See http://sam.zoy.org/wtfpl/COPYING for more details.
   9 "
  10 " ============================================================================
  11 "
  12 " SECTION: Script init stuff {{{1
  13 "============================================================
  14 scriptencoding utf-8
  15 
  16 if exists('loaded_nerd_tree')
  17     finish
  18 endif
  19 if v:version < 703
  20     echoerr "NERDTree: this plugin requires vim >= 7.3. DOWNLOAD IT! You'll thank me later!"
  21     finish
  22 endif
  23 let loaded_nerd_tree = 1
  24 
  25 "for line continuation - i.e dont want C in &cpoptions
  26 let s:old_cpo = &cpoptions
  27 set cpoptions&vim
  28 
  29 "SECTION: Initialize variable calls and other random constants {{{2
  30 let g:NERDTreeAutoCenter            = get(g:, 'NERDTreeAutoCenter',            1)
  31 let g:NERDTreeAutoCenterThreshold   = get(g:, 'NERDTreeAutoCenterThreshold',   3)
  32 let g:NERDTreeCaseSensitiveSort     = get(g:, 'NERDTreeCaseSensitiveSort',     0)
  33 let g:NERDTreeNaturalSort           = get(g:, 'NERDTreeNaturalSort',           0)
  34 let g:NERDTreeSortHiddenFirst       = get(g:, 'NERDTreeSortHiddenFirst',       1)
  35 let g:NERDTreeUseTCD                = get(g:, 'NERDTreeUseTCD',                0)
  36 let g:NERDTreeChDirMode             = get(g:, 'NERDTreeChDirMode',             0)
  37 let g:NERDTreeCreatePrefix          = get(g:, 'NERDTreeCreatePrefix',          'silent')
  38 let g:NERDTreeMinimalUI             = get(g:, 'NERDTreeMinimalUI',             0)
  39 let g:NERDTreeMinimalMenu           = get(g:, 'NERDTreeMinimalMenu',           0)
  40 let g:NERDTreeIgnore                = get(g:, 'NERDTreeIgnore',                ['\~$'])
  41 let g:NERDTreeBookmarksFile         = get(g:, 'NERDTreeBookmarksFile',         expand('$HOME') . '/.NERDTreeBookmarks')
  42 let g:NERDTreeBookmarksSort         = get(g:, 'NERDTreeBookmarksSort',         1)
  43 let g:NERDTreeHighlightCursorline   = get(g:, 'NERDTreeHighlightCursorline',   1)
  44 let g:NERDTreeHijackNetrw           = get(g:, 'NERDTreeHijackNetrw',           1)
  45 let g:NERDTreeMarkBookmarks         = get(g:, 'NERDTreeMarkBookmarks',         1)
  46 let g:NERDTreeMouseMode             = get(g:, 'NERDTreeMouseMode',             1)
  47 let g:NERDTreeNotificationThreshold = get(g:, 'NERDTreeNotificationThreshold', 100)
  48 let g:NERDTreeQuitOnOpen            = get(g:, 'NERDTreeQuitOnOpen',            0)
  49 let g:NERDTreeRespectWildIgnore     = get(g:, 'NERDTreeRespectWildIgnore',     0)
  50 let g:NERDTreeShowBookmarks         = get(g:, 'NERDTreeShowBookmarks',         0)
  51 let g:NERDTreeShowFiles             = get(g:, 'NERDTreeShowFiles',             1)
  52 let g:NERDTreeShowHidden            = get(g:, 'NERDTreeShowHidden',            0)
  53 let g:NERDTreeShowLineNumbers       = get(g:, 'NERDTreeShowLineNumbers',       0)
  54 let g:NERDTreeSortDirs              = get(g:, 'NERDTreeSortDirs',              1)
  55 
  56 if !nerdtree#runningWindows() && !nerdtree#runningCygwin()
  57     let g:NERDTreeDirArrowExpandable  = get(g:, 'NERDTreeDirArrowExpandable',  '▸')
  58     let g:NERDTreeDirArrowCollapsible = get(g:, 'NERDTreeDirArrowCollapsible', '▾')
  59 else
  60     let g:NERDTreeDirArrowExpandable  = get(g:, 'NERDTreeDirArrowExpandable',  '+')
  61     let g:NERDTreeDirArrowCollapsible = get(g:, 'NERDTreeDirArrowCollapsible', '~')
  62 endif
  63 
  64 let g:NERDTreeCascadeOpenSingleChildDir = get(g:, 'NERDTreeCascadeOpenSingleChildDir', 1)
  65 let g:NERDTreeCascadeSingleChildDir     = get(g:, 'NERDTreeCascadeSingleChildDir',     1)
  66 
  67 let g:NERDTreeSortOrder    = get(g:, 'NERDTreeSortOrder', ['\/$', '*', '\.swp$', '\.bak$', '\~$'])
  68 let g:NERDTreeOldSortOrder = []
  69 
  70 let g:NERDTreeGlyphReadOnly = get(g:, 'NERDTreeGlyphReadOnly', 'RO')
  71 
  72 if has('conceal')
  73     let g:NERDTreeNodeDelimiter = get(g:, 'NERDTreeNodeDelimiter', "\x07")
  74 elseif (g:NERDTreeDirArrowExpandable ==# "\u00a0" || g:NERDTreeDirArrowCollapsible ==# "\u00a0")
  75     let g:NERDTreeNodeDelimiter = get(g:, 'NERDTreeNodeDelimiter', "\u00b7")
  76 else
  77     let g:NERDTreeNodeDelimiter = get(g:, 'NERDTreeNodeDelimiter', "\u00a0")
  78 endif
  79 
  80 "the exists() crap here is a hack to stop vim spazzing out when
  81 "loading a session that was created with an open nerd tree. It spazzes
  82 "because it doesnt store b:NERDTree(its a b: var, and its a hash)
  83 let g:NERDTreeStatusline = get(g:, 'NERDTreeStatusline', "%{exists('b:NERDTree')?b:NERDTree.root.path.str():''}")
  84 
  85 let g:NERDTreeWinPos  = get(g:, 'NERDTreeWinPos', 'left')
  86 let g:NERDTreeWinSize = get(g:, 'NERDTreeWinSize', 31)
  87 
  88 "init the shell commands that will be used to copy nodes, and remove dir trees
  89 "Note: the space after the command is important
  90 if nerdtree#runningWindows()
  91     let g:NERDTreeRemoveDirCmd = get(g:, 'NERDTreeRemoveDirCmd', 'rmdir /s /q ')
  92     let g:NERDTreeCopyDirCmd   = get(g:, 'NERDTreeCopyDirCmd',   'xcopy /s /e /i /y /q ')
  93     let g:NERDTreeCopyFileCmd  = get(g:, 'NERDTreeCopyFileCmd',  'copy /y ')
  94 else
  95     let g:NERDTreeRemoveDirCmd = get(g:, 'NERDTreeRemoveDirCmd', 'rm -rf ')
  96     let g:NERDTreeCopyCmd      = get(g:, 'NERDTreeCopyCmd',      'cp -r ')
  97 endif
  98 
  99 "SECTION: Init variable calls for key mappings {{{2
 100 let g:NERDTreeMapCustomOpen      = get(g:, 'NERDTreeMapCustomOpen',      '<CR>')
 101 let g:NERDTreeMapActivateNode    = get(g:, 'NERDTreeMapActivateNode',    'o')
 102 let g:NERDTreeMapChangeRoot      = get(g:, 'NERDTreeMapChangeRoot',      'C')
 103 let g:NERDTreeMapChdir           = get(g:, 'NERDTreeMapChdir',           'cd')
 104 let g:NERDTreeMapCloseChildren   = get(g:, 'NERDTreeMapCloseChildren',   'X')
 105 let g:NERDTreeMapCloseDir        = get(g:, 'NERDTreeMapCloseDir',        'x')
 106 let g:NERDTreeMapDeleteBookmark  = get(g:, 'NERDTreeMapDeleteBookmark',  'D')
 107 let g:NERDTreeMapMenu            = get(g:, 'NERDTreeMapMenu',            'm')
 108 let g:NERDTreeMapHelp            = get(g:, 'NERDTreeMapHelp',            '?')
 109 let g:NERDTreeMapJumpFirstChild  = get(g:, 'NERDTreeMapJumpFirstChild',  'K')
 110 let g:NERDTreeMapJumpLastChild   = get(g:, 'NERDTreeMapJumpLastChild',   'J')
 111 let g:NERDTreeMapJumpNextSibling = get(g:, 'NERDTreeMapJumpNextSibling', '<C-j>')
 112 let g:NERDTreeMapJumpParent      = get(g:, 'NERDTreeMapJumpParent',      'p')
 113 let g:NERDTreeMapJumpPrevSibling = get(g:, 'NERDTreeMapJumpPrevSibling', '<C-k>')
 114 let g:NERDTreeMapJumpRoot        = get(g:, 'NERDTreeMapJumpRoot',        'P')
 115 let g:NERDTreeMapOpenExpl        = get(g:, 'NERDTreeMapOpenExpl',        'e')
 116 let g:NERDTreeMapOpenInTab       = get(g:, 'NERDTreeMapOpenInTab',       't')
 117 let g:NERDTreeMapOpenInTabSilent = get(g:, 'NERDTreeMapOpenInTabSilent', 'T')
 118 let g:NERDTreeMapOpenRecursively = get(g:, 'NERDTreeMapOpenRecursively', 'O')
 119 let g:NERDTreeMapOpenSplit       = get(g:, 'NERDTreeMapOpenSplit',       'i')
 120 let g:NERDTreeMapOpenVSplit      = get(g:, 'NERDTreeMapOpenVSplit',      's')
 121 let g:NERDTreeMapPreview         = get(g:, 'NERDTreeMapPreview',         'g'.NERDTreeMapActivateNode)
 122 let g:NERDTreeMapPreviewSplit    = get(g:, 'NERDTreeMapPreviewSplit',    'g'.NERDTreeMapOpenSplit)
 123 let g:NERDTreeMapPreviewVSplit   = get(g:, 'NERDTreeMapPreviewVSplit',   'g'.NERDTreeMapOpenVSplit)
 124 let g:NERDTreeMapQuit            = get(g:, 'NERDTreeMapQuit',            'q')
 125 let g:NERDTreeMapRefresh         = get(g:, 'NERDTreeMapRefresh',         'r')
 126 let g:NERDTreeMapRefreshRoot     = get(g:, 'NERDTreeMapRefreshRoot',     'R')
 127 let g:NERDTreeMapToggleBookmarks = get(g:, 'NERDTreeMapToggleBookmarks', 'B')
 128 let g:NERDTreeMapToggleFiles     = get(g:, 'NERDTreeMapToggleFiles',     'F')
 129 let g:NERDTreeMapToggleFilters   = get(g:, 'NERDTreeMapToggleFilters',   'f')
 130 let g:NERDTreeMapToggleHidden    = get(g:, 'NERDTreeMapToggleHidden',    'I')
 131 let g:NERDTreeMapToggleZoom      = get(g:, 'NERDTreeMapToggleZoom',      'A')
 132 let g:NERDTreeMapUpdir           = get(g:, 'NERDTreeMapUpdir',           'u')
 133 let g:NERDTreeMapUpdirKeepOpen   = get(g:, 'NERDTreeMapUpdirKeepOpen',   'U')
 134 let g:NERDTreeMapCWD             = get(g:, 'NERDTreeMapCWD',             'CD')
 135 let g:NERDTreeMenuDown           = get(g:, 'NERDTreeMenuDown',           'j')
 136 let g:NERDTreeMenuUp             = get(g:, 'NERDTreeMenuUp',             'k')
 137 
 138 "SECTION: Load class files{{{2
 139 call nerdtree#loadClassFiles()
 140 
 141 " SECTION: Commands {{{1
 142 "============================================================
 143 call nerdtree#ui_glue#setupCommands()
 144 
 145 " SECTION: Auto commands {{{1
 146 "============================================================
 147 augroup NERDTree
 148     "Save the cursor position whenever we close the nerd tree
 149     exec 'autocmd BufLeave,WinLeave '. g:NERDTreeCreator.BufNamePrefix() .'* if g:NERDTree.IsOpen() | call b:NERDTree.ui.saveScreenState() | endif'
 150 
 151     "disallow insert mode in the NERDTree
 152     exec 'autocmd BufEnter,WinEnter '. g:NERDTreeCreator.BufNamePrefix() .'* stopinsert'
 153 augroup END
 154 
 155 if g:NERDTreeHijackNetrw
 156     augroup NERDTreeHijackNetrw
 157         autocmd VimEnter * silent! autocmd! FileExplorer
 158         au BufEnter,VimEnter * call nerdtree#checkForBrowse(expand('<amatch>'))
 159     augroup END
 160 endif
 161 
 162 if g:NERDTreeChDirMode ==# 3
 163     augroup NERDTreeChDirOnTabSwitch
 164         autocmd TabEnter * if g:NERDTree.ExistsForTab()|call g:NERDTree.ForCurrentTab().getRoot().path.changeToDir()|endif
 165     augroup END
 166 endif
 167 
 168 " SECTION: Public API {{{1
 169 "============================================================
 170 function! NERDTreeAddMenuItem(options)
 171     call g:NERDTreeMenuItem.Create(a:options)
 172 endfunction
 173 
 174 function! NERDTreeAddMenuSeparator(...)
 175     let opts = a:0 ? a:1 : {}
 176     call g:NERDTreeMenuItem.CreateSeparator(opts)
 177 endfunction
 178 
 179 function! NERDTreeAddSubmenu(options)
 180     return g:NERDTreeMenuItem.Create(a:options)
 181 endfunction
 182 
 183 function! NERDTreeAddKeyMap(options)
 184     call g:NERDTreeKeyMap.Create(a:options)
 185 endfunction
 186 
 187 function! NERDTreeRender()
 188     call nerdtree#renderView()
 189 endfunction
 190 
 191 function! NERDTreeFocus()
 192     if g:NERDTree.IsOpen()
 193         call g:NERDTree.CursorToTreeWin(0)
 194     else
 195         call g:NERDTreeCreator.ToggleTabTree('')
 196     endif
 197 endfunction
 198 
 199 function! NERDTreeCWD()
 200 
 201     if empty(getcwd())
 202         call nerdtree#echoWarning('current directory does not exist')
 203         return
 204     endif
 205 
 206     try
 207         let l:cwdPath = g:NERDTreePath.New(getcwd())
 208     catch /^NERDTree.InvalidArgumentsError/
 209         call nerdtree#echoWarning('current directory does not exist')
 210         return
 211     endtry
 212 
 213     call NERDTreeFocus()
 214 
 215     if b:NERDTree.root.path.equals(l:cwdPath)
 216         return
 217     endif
 218 
 219     let l:newRoot = g:NERDTreeFileNode.New(l:cwdPath, b:NERDTree)
 220     call b:NERDTree.changeRoot(l:newRoot)
 221     normal! ^
 222 endfunction
 223 
 224 function! NERDTreeAddPathFilter(callback)
 225     call g:NERDTree.AddPathFilter(a:callback)
 226 endfunction
 227 
 228 " SECTION: Post Source Actions {{{1
 229 call nerdtree#postSourceActions()
 230 
 231 "reset &cpoptions back to users setting
 232 let &cpoptions = s:old_cpo
 233 
 234 " vim: set sw=4 sts=4 et fdm=marker: