mirror of
				https://github.com/amix/vimrc
				synced 2025-10-31 06:33:35 +08:00 
			
		
		
		
	Updated plugins
This commit is contained in:
		| @ -5,9 +5,12 @@ Closes #  <!-- Issue number this PR addresses. If none, remove this line. --> | ||||
| --- | ||||
| ### New Version Info | ||||
|  | ||||
| - [ ] Derive a new version number. Increment the: | ||||
|     - [ ] `MAJOR` version when you make incompatible API changes | ||||
|     - [ ] `MINOR` version when you add functionality in a backwards-compatible manner | ||||
|     - [ ] `PATCH` version when you make backwards-compatible bug fixes | ||||
| #### Author's Instructions | ||||
| - [ ] Derive a new `MAJOR.MINOR.PATCH` version number. Increment the: | ||||
|     - `MAJOR` version when you make incompatible API changes | ||||
|     - `MINOR` version when you add functionality in a backwards-compatible manner | ||||
|     - `PATCH` version when you make backwards-compatible bug fixes | ||||
| - [ ] Update [CHANGELOG.md](https://github.com/scrooloose/nerdtree/blob/master/CHANGELOG.md), following the established pattern. | ||||
| - [ ] Tag the merge commit, e.g. `git tag -a 3.1.4 -m "v3.1.4" && git push origin --tags` | ||||
| #### Collaborator's Instructions | ||||
| - [ ] Review [CHANGELOG.md](https://github.com/scrooloose/nerdtree/blob/master/CHANGELOG.md), suggesting a different version number if necessary. | ||||
| - [ ] After merge, tag the merge commit, e.g. `git tag -a 3.1.4 -m "v3.1.4" && git push origin --tags` | ||||
|  | ||||
| @ -1,19 +1,42 @@ | ||||
| # Change Log | ||||
| # NERDTree Change Log | ||||
|  | ||||
| #### 5.3... | ||||
| - **.0**: Add file extension and size to sorting capabilities [#1029](https://github.com/scrooloose/nerdtree/pull/1029) | ||||
| #### 5.2... | ||||
| - **.9**: Suppress events for intermediate window/tab/buffer changes [#1026](https://github.com/scrooloose/nerdtree/pull/1026) | ||||
| <!-- | ||||
|     Introduce a new MAJOR.MINOR version with a 4-hash header. | ||||
|  | ||||
|     PATCH versions are listed from newest to oldest under their respective MAJOR.MINOR version | ||||
|     in an unordered list.  The format is: | ||||
|         - **.PATCH**: Pull Request Title (PR Author) [PR Number](Link to PR) | ||||
| --> | ||||
|  | ||||
| #### 6.2 | ||||
| - **.1**: Menu option, 'copy path to clipboard' is aware of VIM clipboard option (jhzn) [#1056](https://github.com/scrooloose/nerdtree/pull/1056) | ||||
| - **.0**: Support tab-specific CWDs (PhilRunninger) [#1032](https://github.com/scrooloose/nerdtree/pull/1032) | ||||
| #### 6.1 | ||||
| - **.4**: Add VIM built-in package management to read me file. (pesarkhobeee) [#1049](https://github.com/scrooloose/nerdtree/pull/1049) | ||||
| - **.3**: Save/Set screen state also on WinLeave and WinEnter. (PhilRunninger) [#1048](https://github.com/scrooloose/nerdtree/pull/1048) | ||||
| - **.2**: Wrap saveScreenState's statements in a try-catch block. (PhilRunninger) [#1047](https://github.com/scrooloose/nerdtree/pull/1047) | ||||
| - **.1**: Catch errors when trying to read CHANGELOG.md. (PhilRunninger) [#1045](https://github.com/scrooloose/nerdtree/pull/1045) | ||||
| - **.0**: If file path doesn't exist, :NERDTreeFind its parent directory instead. (PhilRunninger) [#1043](https://github.com/scrooloose/nerdtree/pull/1043) | ||||
| #### 6.0 | ||||
| - **.1**: Reintroduce necessary variable mistakenly removed. (PhilRunninger) [#1040](https://github.com/scrooloose/nerdtree/pull/1040) | ||||
| - **.0**: Make the behavior of window splits consistent (dragonxlwang, PhilRunninger) [#1035](https://github.com/scrooloose/nerdtree/pull/1035) | ||||
| #### 5.3 | ||||
| - **.3**: Fix (p)ath not displaying in the minimal menu (tuzz) [#1038](https://github.com/scrooloose/nerdtree/pull/1038) | ||||
| - **.2**: Enable events when closing NerdTree window. (PhilRunninger) [#1037](https://github.com/scrooloose/nerdtree/pull/1037) | ||||
| - **.1**: Fix the `e` key mapping to use netrw if desired (PhilRunninger) [#1031](https://github.com/scrooloose/nerdtree/pull/1031) | ||||
| - **.0**: Add file extension and size to sorting capabilities (PhilRunninger) [#1029](https://github.com/scrooloose/nerdtree/pull/1029) | ||||
| #### 5.2 | ||||
| - **.9**: Suppress events for intermediate window/tab/buffer changes (PhilRunninger) [#1026](https://github.com/scrooloose/nerdtree/pull/1026) | ||||
| - **.8**: Revert [#1019](https://github.com/scrooloose/nerdtree/pull/1019) to fix nvim artifacts and flickering. (PhilRunninger) [#1021](https://github.com/scrooloose/nerdtree/pull/1021) | ||||
| - **.7**: Use :mode only in neovim. MacVim still needs to use :redraw! [#1019](https://github.com/scrooloose/nerdtree/pull/1019) | ||||
| - **.6**: In CHANGELOG.md and PR template, make reference to PR a true HTML link. [#1017](https://github.com/scrooloose/nerdtree/pull/1017) | ||||
| - **.7**: Use :mode only in neovim. MacVim still needs to use :redraw! (PhilRunninger) [#1019](https://github.com/scrooloose/nerdtree/pull/1019) | ||||
| - **.6**: In CHANGELOG.md and PR template, make reference to PR a true HTML link. (PhilRunninger) [#1017](https://github.com/scrooloose/nerdtree/pull/1017) | ||||
| - **.5**: Use `:mode` instead of `:redraw!` when updating menu. (PhilRunninger) [#1016](https://github.com/scrooloose/nerdtree/pull/1016) | ||||
| - **.4**: When searching for root line num, stop at end of file. (PhilRunninger) [#1015](https://github.com/scrooloose/nerdtree/pull/1015) | ||||
| - **.3**: Fix `<CR>` key map on the bookmark (lkebin) [#1014](https://github.com/scrooloose/nerdtree/pull/1014) | ||||
| - **.2**: Make Enter work on the `.. ( up a dir )` line (PhilRunninger) [#1013](https://github.com/scrooloose/nerdtree/pull/1013) | ||||
| - **.1**: Fix nerdtree#version() on Windows. (PhilRunninger) | ||||
| - **.0**: Expand functionality of `<CR>` mapping. (PhilRunninger) [#1011](https://github.com/scrooloose/nerdtree/pull/1011) | ||||
| #### 5.1... | ||||
| #### 5.1 | ||||
| - **.3**: Remove @mentions from PR template and change log. They weren't working. (PhilRunninger) [#1009](https://github.com/scrooloose/nerdtree/pull/1009) | ||||
| - **.2**: Fix NERDTree opening with the wrong size. (PhilRunninger) [#1008](https://github.com/scrooloose/nerdtree/pull/1008) | ||||
| - **.1**: Update Changelog and create PR Template (PhilRunninger) [#1007](https://github.com/scrooloose/nerdtree/pull/1007) | ||||
|  | ||||
| @ -17,27 +17,62 @@ included documentation. | ||||
| Installation | ||||
| ------------ | ||||
|  | ||||
| Below are just some of the methods for installing NERDTree. Do not follow all of these instructions; just pick your favorite one. Other plugin managers exist, and NERDTree should install just fine with any of them. | ||||
|  | ||||
| #### Vim 8+ packages | ||||
|  | ||||
| If you are using VIM version 8 or higher you can use its built-in package management; see `:help packages` for more information. Just run these commands in your terminal: | ||||
|  | ||||
| ```bash | ||||
| git clone https://github.com/scrooloose/nerdtree.git ~/.vim/pack/vendor/start/nerdtree | ||||
| vim -u NONE -c "helptags ~/.vim/pack/vendor/start/nerdtree/doc" -c q | ||||
| ``` | ||||
|  | ||||
| Otherwise, these are some of the several 3rd-party plugin managers you can choose from. Be sure you read the instructions for your chosen plugin, as there typically are additional steps you nee d to take. | ||||
|  | ||||
| #### [pathogen.vim](https://github.com/tpope/vim-pathogen) | ||||
|  | ||||
|     git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree | ||||
| In the terminal, | ||||
| ```bash | ||||
| git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree | ||||
| ``` | ||||
| In your vimrc, | ||||
| ```vim | ||||
| call pathogen#infect() | ||||
| syntax on | ||||
| filetype plugin indent on | ||||
| ``` | ||||
|  | ||||
| Then reload Vim, run `:helptags ~/.vim/bundle/nerdtree/doc/` or `:Helptags`, and check out `:help NERDTree.txt`. | ||||
| Then reload vim, run `:helptags ~/.vim/bundle/nerdtree/doc/` or `:Helptags`. | ||||
|  | ||||
| #### [Vundle.vim](https://github.com/VundleVim/Vundle.vim) | ||||
| ```vim | ||||
| call vundle#begin() | ||||
| Plugin 'scrooloose/nerdtree' | ||||
| call vundle#end() | ||||
| ``` | ||||
|  | ||||
| #### [vim-plug](https://github.com/junegunn/vim-plug) | ||||
| ```vim | ||||
| call plug#begin() | ||||
| Plug 'scrooloose/nerdtree' | ||||
| call plug#end() | ||||
| ``` | ||||
|  | ||||
| #### [apt-vim](https://github.com/egalpin/apt-vim) | ||||
| ```bash | ||||
| apt-vim install -y https://github.com/scrooloose/nerdtree.git | ||||
| ``` | ||||
|  | ||||
|     apt-vim install -y https://github.com/scrooloose/nerdtree.git | ||||
|  | ||||
| F.A.Q. | ||||
| F.A.Q. (here, and in the [Wiki](https://github.com/scrooloose/nerdtree/wiki)) | ||||
| ------ | ||||
|  | ||||
| > Is there any support for `git` flags? | ||||
| #### Is there any support for `git` flags? | ||||
|  | ||||
| Yes, install [nerdtree-git-plugin](https://github.com/Xuyuanp/nerdtree-git-plugin). | ||||
|  | ||||
| --- | ||||
|  | ||||
| > Can I have the nerdtree on every tab automatically? | ||||
| #### Can I have the nerdtree on every tab automatically? | ||||
|  | ||||
| Nope. If this is something you want then chances are you aren't using tabs and | ||||
| buffers as they were intended to be used. Read this | ||||
| @ -46,53 +81,65 @@ http://stackoverflow.com/questions/102384/using-vims-tabs-like-buffers | ||||
| If you are interested in this behaviour then consider [vim-nerdtree-tabs](https://github.com/jistr/vim-nerdtree-tabs) | ||||
|  | ||||
| --- | ||||
| > How can I open a NERDTree automatically when vim starts up? | ||||
| #### How can I open a NERDTree automatically when vim starts up? | ||||
|  | ||||
| Stick this in your vimrc: `autocmd vimenter * NERDTree` | ||||
|  | ||||
| --- | ||||
| > How can I open a NERDTree automatically when vim starts up if no files were specified? | ||||
| #### How can I open a NERDTree automatically when vim starts up if no files were specified? | ||||
|  | ||||
| Stick this in your vimrc: | ||||
|  | ||||
|     autocmd StdinReadPre * let s:std_in=1 | ||||
|     autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif | ||||
| ```vim | ||||
| autocmd StdinReadPre * let s:std_in=1 | ||||
| autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif | ||||
| ``` | ||||
|  | ||||
| Note: Now start vim with plain `vim`, not `vim .` | ||||
|  | ||||
| --- | ||||
| > How can I open NERDTree automatically when vim starts up on opening a directory? | ||||
| #### What if I'm also opening a saved session, for example `vim -S session_file.vim`? I don't want NERDTree to open in that scenario. | ||||
| ```vim | ||||
| autocmd StdinReadPre * let s:std_in=1 | ||||
| autocmd VimEnter * if argc() == 0 && !exists("s:std_in") && v:this_session == "" | NERDTree | endif | ||||
| ``` | ||||
|  | ||||
|     autocmd StdinReadPre * let s:std_in=1 | ||||
|     autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif | ||||
| --- | ||||
| #### How can I open NERDTree automatically when vim starts up on opening a directory? | ||||
| ```vim | ||||
| autocmd StdinReadPre * let s:std_in=1 | ||||
| autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif | ||||
| ``` | ||||
|  | ||||
| This window is tab-specific, meaning it's used by all windows in the tab. This trick also prevents NERDTree from hiding when first selecting a file. | ||||
|  | ||||
| Note: Executing `vim ~/some-directory` will open NERDTree and a new edit window. `exe 'cd '.argv()[0]` sets the `pwd` of the new edit window to `~/some-directory` | ||||
|  | ||||
| --- | ||||
| > How can I map a specific key or shortcut to open NERDTree? | ||||
| #### How can I map a specific key or shortcut to open NERDTree? | ||||
|  | ||||
| Stick this in your vimrc to open NERDTree with `Ctrl+n` (you can set whatever key you want): | ||||
|  | ||||
|     map <C-n> :NERDTreeToggle<CR> | ||||
| ```vim | ||||
| map <C-n> :NERDTreeToggle<CR> | ||||
| ``` | ||||
|  | ||||
| --- | ||||
| > How can I close vim if the only window left open is a NERDTree? | ||||
| #### How can I close vim if the only window left open is a NERDTree? | ||||
|  | ||||
| Stick this in your vimrc: | ||||
|  | ||||
|     autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif | ||||
| ```vim | ||||
| autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif | ||||
| ``` | ||||
|  | ||||
| --- | ||||
| > Can I have different highlighting for different file extensions? | ||||
| #### Can I have different highlighting for different file extensions? | ||||
|  | ||||
| See here: https://github.com/scrooloose/nerdtree/issues/433#issuecomment-92590696 | ||||
|  | ||||
| --- | ||||
| > How can I change default arrows? | ||||
| #### How can I change default arrows? | ||||
|  | ||||
| Use these variables in your vimrc. Note that below are default arrow symbols | ||||
|  | ||||
|     let g:NERDTreeDirArrowExpandable = '▸' | ||||
|     let g:NERDTreeDirArrowCollapsible = '▾' | ||||
| ```vim | ||||
| let g:NERDTreeDirArrowExpandable = '▸' | ||||
| let g:NERDTreeDirArrowCollapsible = '▾' | ||||
| ``` | ||||
|  | ||||
| @ -4,24 +4,33 @@ endif | ||||
| let g:loaded_nerdtree_autoload = 1 | ||||
|  | ||||
| let s:rootNERDTreePath = resolve(expand("<sfile>:p:h:h")) | ||||
|  | ||||
| "FUNCTION: nerdtree#version(...) {{{1 | ||||
| "  If any value is given as an argument, the entire line of text from the | ||||
| "  change log is shown for the current version; otherwise, only the version | ||||
| "  number is shown. | ||||
| function! nerdtree#version(...) | ||||
|     let l:changelog = readfile(join([s:rootNERDTreePath, "CHANGELOG.md"], nerdtree#slash())) | ||||
|     let l:text = 'Unknown' | ||||
|     let l:line = 0 | ||||
|     while l:line <= len(l:changelog) | ||||
|         if l:changelog[l:line] =~ '\d\+\.\d\+' | ||||
|             let l:text = substitute(l:changelog[l:line], '.*\(\d\+.\d\+\).*', '\1', '') | ||||
|             let l:text .= substitute(l:changelog[l:line+1], '^.\{-}\(\.\d\+\).\{-}:\(.*\)', a:0>0 ? '\1:\2' : '\1', '') | ||||
|             break | ||||
|         endif | ||||
|         let l:line += 1 | ||||
|     endwhile | ||||
|     try | ||||
|         let l:changelog = readfile(join([s:rootNERDTreePath, "CHANGELOG.md"], nerdtree#slash())) | ||||
|         let l:line = 0 | ||||
|         while l:line <= len(l:changelog) | ||||
|             if l:changelog[l:line] =~ '\d\+\.\d\+' | ||||
|                 let l:text = substitute(l:changelog[l:line], '.*\(\d\+.\d\+\).*', '\1', '') | ||||
|                 let l:text .= substitute(l:changelog[l:line+1], '^.\{-}\(\.\d\+\).\{-}:\(.*\)', a:0>0 ? '\1:\2' : '\1', '') | ||||
|                 break | ||||
|             endif | ||||
|             let l:line += 1 | ||||
|         endwhile | ||||
|     catch | ||||
|     endtry | ||||
|     return l:text | ||||
| endfunction | ||||
|  | ||||
| " SECTION: General Functions {{{1 | ||||
| "============================================================ | ||||
|  | ||||
| "FUNCTION: nerdtree#slash() {{{2 | ||||
| function! nerdtree#slash() | ||||
|  | ||||
|     if nerdtree#runningWindows() | ||||
| @ -49,7 +58,6 @@ function! nerdtree#and(x,y) | ||||
|             if (l:x % 2) && (l:y % 2) | ||||
|                 let l:result += float2nr(pow(2, l:n)) | ||||
|             endif | ||||
|             echomsg l:x . ", " . l:y . " => " l:result | ||||
|             let l:x = float2nr(l:x / 2) | ||||
|             let l:y = float2nr(l:y / 2) | ||||
|             let l:n += 1 | ||||
|  | ||||
| @ -72,6 +72,7 @@ function! nerdtree#ui_glue#createDefaultBindings() | ||||
|     call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': 'Bookmark', 'callback': s . 'openInNewTabSilent' }) | ||||
|  | ||||
|     call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenExpl, 'scope': "DirNode", 'callback': s."openExplorer" }) | ||||
|     call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenExpl, 'scope': "FileNode", 'callback': s."openExplorer" }) | ||||
|  | ||||
|     call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapDeleteBookmark, 'scope': "Bookmark", 'callback': s."deleteBookmark" }) | ||||
| endfunction | ||||
| @ -283,6 +284,9 @@ endfunction | ||||
| " FUNCTION: s:findAndRevealPath(pathStr) {{{1 | ||||
| function! s:findAndRevealPath(pathStr) | ||||
|     let l:pathStr = !empty(a:pathStr) ? a:pathStr : expand('%:p') | ||||
|     if !filereadable(l:pathStr) | ||||
|         let l:pathStr = fnamemodify(l:pathStr, ':h') | ||||
|     endif | ||||
|  | ||||
|     if empty(l:pathStr) | ||||
|         call nerdtree#echoWarning('no file for the current buffer') | ||||
|  | ||||
| @ -849,9 +849,17 @@ above nodes would then be sorted like this: > | ||||
|     z110.txt | ||||
| < | ||||
| ------------------------------------------------------------------------------ | ||||
|                                                              *NERDTreeChDirMode* | ||||
|                                                                 *NERDTreeUseTCD* | ||||
| Values: 0 or 1. | ||||
| Default: 0. | ||||
|  | ||||
| Values: 0, 1 or 2. | ||||
| By default, NERDTree will use the `:cd` command to change the current working | ||||
| directory. If this setting is turned on, and the `:tcd` command is available, it | ||||
| will be used instead. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
|                                                              *NERDTreeChDirMode* | ||||
| Values: 0, 1, 2, or 3. | ||||
| Default: 0. | ||||
|  | ||||
| Use this setting to tell the script when (if at all) to change the current | ||||
| @ -871,6 +879,9 @@ the CWD is changed whenever the tree root is changed. For example, if the CWD | ||||
| is /home/marty/foobar and you make the node for /home/marty/foobar/baz the new | ||||
| root then the CWD will become /home/marty/foobar/baz. | ||||
|  | ||||
| If the set to 3, then it behaves the same as if set to 2, and the CWD is | ||||
| changed whenever changing tabs to whatever the tree root is on that tab. | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
|                                                    *NERDTreeHighlightCursorline* | ||||
| Values: 0 or 1. | ||||
| @ -980,7 +991,6 @@ then (to single click activate it) you must click somewhere in | ||||
|  | ||||
| ------------------------------------------------------------------------------ | ||||
|                                                             *NERDTreeQuitOnOpen* | ||||
|  | ||||
| Values: 0,1,2 or 3. | ||||
| Default: 0 | ||||
|  | ||||
|  | ||||
| @ -62,9 +62,10 @@ function! s:MenuController._echoPrompt() | ||||
|  | ||||
|     if self.isMinimal() | ||||
|         let selection = self.menuItems[self.selection].text | ||||
|         let keyword = matchstr(selection, "\([^ ]*") | ||||
|  | ||||
|         let shortcuts = map(copy(self.menuItems), "v:val['shortcut']") | ||||
|         let shortcuts[self.selection] = " " . split(selection)[0] . " " | ||||
|         let shortcuts[self.selection] = " " . keyword . " " | ||||
|  | ||||
|         echo "Menu: [" . join(shortcuts, ",") . "] (" . navHelp . " or shortcut): " | ||||
|     else | ||||
|  | ||||
| @ -20,7 +20,7 @@ function! s:NERDTree.changeRoot(node) | ||||
|     call self.root.open() | ||||
|  | ||||
|     "change dir to the dir of the new root if instructed to | ||||
|     if g:NERDTreeChDirMode ==# 2 | ||||
|     if g:NERDTreeChDirMode >= 2 | ||||
|         call self.root.path.changeToDir() | ||||
|     endif | ||||
|  | ||||
| @ -52,7 +52,7 @@ function! s:NERDTree.Close() | ||||
|         endif | ||||
|  | ||||
|         call nerdtree#exec(s:NERDTree.GetWinNum() . " wincmd w", 1) | ||||
|         call nerdtree#exec("close", 1) | ||||
|         call nerdtree#exec("close", 0) | ||||
|         if l:useWinId | ||||
|             call nerdtree#exec("call win_gotoid(" . l:activeBufOrWin . ")", 0) | ||||
|         else | ||||
| @ -148,12 +148,19 @@ function! s:NERDTree.GetWinNum() | ||||
|         return bufwinnr(t:NERDTreeBufName) | ||||
|     endif | ||||
|  | ||||
|     " If WindowTree, there is no t:NERDTreeBufName variable. Search all windows. | ||||
|     for w in range(1,winnr('$')) | ||||
|         if bufname(winbufnr(w)) =~# '^' . g:NERDTreeCreator.BufNamePrefix() . '\d\+$' | ||||
|             return w | ||||
|         endif | ||||
|     endfor | ||||
|  | ||||
|     return -1 | ||||
| endfunction | ||||
|  | ||||
| "FUNCTION: s:NERDTree.IsOpen() {{{1 | ||||
| function! s:NERDTree.IsOpen() | ||||
|     return s:NERDTree.GetWinNum() != -1 || bufname('%') =~# '^' . g:NERDTreeCreator.BufNamePrefix() . '\d\+$' | ||||
|     return s:NERDTree.GetWinNum() != -1 | ||||
| endfunction | ||||
|  | ||||
| "FUNCTION: s:NERDTree.isTabTree() {{{1 | ||||
|  | ||||
| @ -71,9 +71,9 @@ endfunction | ||||
| function! s:Opener._gotoTargetWin() | ||||
|     if b:NERDTree.isWinTree() | ||||
|         if self._where == 'v' | ||||
|             vsplit | ||||
|             call self._newVSplit() | ||||
|         elseif self._where == 'h' | ||||
|             split | ||||
|             call self._newSplit() | ||||
|         elseif self._where == 't' | ||||
|             tabnew | ||||
|         endif | ||||
| @ -153,44 +153,18 @@ endfunction | ||||
|  | ||||
| " FUNCTION: Opener._newSplit() {{{1 | ||||
| function! s:Opener._newSplit() | ||||
|     " Save the user's settings for splitbelow and splitright | ||||
|     let savesplitbelow=&splitbelow | ||||
|     let savesplitright=&splitright | ||||
|  | ||||
|     " 'there' will be set to a command to move from the split window | ||||
|     " back to the explorer window | ||||
|     " | ||||
|     " 'back' will be set to a command to move from the explorer window | ||||
|     " back to the newly split window | ||||
|     " | ||||
|     " 'right' and 'below' will be set to the settings needed for | ||||
|     " splitbelow and splitright IF the explorer is the only window. | ||||
|     " | ||||
|     let there= g:NERDTreeWinPos ==# "left" ? "wincmd h" : "wincmd l" | ||||
|     let back = g:NERDTreeWinPos ==# "left" ? "wincmd l" : "wincmd h" | ||||
|     let right= g:NERDTreeWinPos ==# "left" | ||||
|     let below=0 | ||||
|  | ||||
|     " Attempt to go to adjacent window | ||||
|     call nerdtree#exec(back, 1) | ||||
|  | ||||
|     let onlyOneWin = (winnr("$") ==# 1) | ||||
|  | ||||
|     " If no adjacent window, set splitright and splitbelow appropriately | ||||
|     let savesplitright = &splitright | ||||
|     if onlyOneWin | ||||
|         let &splitright=right | ||||
|         let &splitbelow=below | ||||
|     else | ||||
|         " found adjacent window - invert split direction | ||||
|         let &splitright=!right | ||||
|         let &splitbelow=!below | ||||
|         let &splitright = (g:NERDTreeWinPos ==# "left") | ||||
|     endif | ||||
|  | ||||
|     " If only one window (ie. NERDTree), split vertically instead. | ||||
|     let splitMode = onlyOneWin ? "vertical" : "" | ||||
|  | ||||
|     " Open the new window | ||||
|     try | ||||
|         exec(splitMode." sp ") | ||||
|         call nerdtree#exec('wincmd p', 1) | ||||
|         call nerdtree#exec(splitMode . " split",1) | ||||
|     catch /^Vim\%((\a\+)\)\=:E37/ | ||||
|         call g:NERDTree.CursorToTreeWin() | ||||
|         throw "NERDTree.FileAlreadyOpenAndModifiedError: ". self._path.str() ." is already open and modified." | ||||
| @ -200,14 +174,12 @@ function! s:Opener._newSplit() | ||||
|  | ||||
|     "resize the tree window if no other window was open before | ||||
|     if onlyOneWin | ||||
|         let size = exists("b:NERDTreeOldWindowSize") ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize | ||||
|         call nerdtree#exec(there, 1) | ||||
|         exec("silent ". splitMode ." resize ". size) | ||||
|         let size = exists('b:NERDTreeOldWindowSize') ? b:NERDTreeOldWindowSize : g:NERDTreeWinSize | ||||
|         call nerdtree#exec('wincmd p', 1) | ||||
|         call nerdtree#exec('silent '. splitMode .' resize '. size, 1) | ||||
|         call nerdtree#exec('wincmd p', 0) | ||||
|     endif | ||||
|  | ||||
|     " Restore splitmode settings | ||||
|     let &splitbelow=savesplitbelow | ||||
|     let &splitright=savesplitright | ||||
| endfunction | ||||
|  | ||||
| @ -215,7 +187,10 @@ endfunction | ||||
| function! s:Opener._newVSplit() | ||||
|     let l:winwidth = winwidth('.') | ||||
|  | ||||
|     if winnr('$') == 1 | ||||
|     let onlyOneWin = (winnr("$") ==# 1) | ||||
|     let savesplitright = &splitright | ||||
|     if onlyOneWin | ||||
|         let &splitright = (g:NERDTreeWinPos ==# "left") | ||||
|         let l:winwidth = g:NERDTreeWinSize | ||||
|     endif | ||||
|  | ||||
| @ -229,6 +204,7 @@ function! s:Opener._newVSplit() | ||||
|     execute 'silent vertical resize ' . l:winwidth | ||||
|  | ||||
|     call nerdtree#exec(l:currentWindowNumber . 'wincmd w', 0) | ||||
|     let &splitright=savesplitright | ||||
| endfunction | ||||
|  | ||||
| " FUNCTION: Opener.open(target) {{{1 | ||||
|  | ||||
| @ -87,8 +87,13 @@ function! s:Path.changeToDir() | ||||
|     endif | ||||
|  | ||||
|     try | ||||
|         execute "cd " . dir | ||||
|         call nerdtree#echo("CWD is now: " . getcwd()) | ||||
|         if g:NERDTreeUseTCD && exists(":tcd") == 2 | ||||
|             execute "tcd " . dir | ||||
|             call nerdtree#echo("Tab's CWD is now: " . getcwd()) | ||||
|         else | ||||
|             execute "cd " . dir | ||||
|             call nerdtree#echo("CWD is now: " . getcwd()) | ||||
|         endif | ||||
|     catch | ||||
|         throw "NERDTree.PathChangeError: cannot change CWD to " . dir | ||||
|     endtry | ||||
|  | ||||
| @ -523,7 +523,8 @@ endfunction | ||||
| " Open an explorer window for this node in the previous window. The explorer | ||||
| " can be a NERDTree window or a netrw window. | ||||
| function! s:TreeDirNode.openExplorer() | ||||
|     call self.open({'where': 'p'}) | ||||
|     execute "wincmd p" | ||||
|     execute "edit ".self.path.str({'format':'Edit'}) | ||||
| endfunction | ||||
|  | ||||
| " FUNCTION: TreeDirNode.openInNewTab(options) {{{1 | ||||
|  | ||||
| @ -246,6 +246,12 @@ function! s:TreeFileNode.openInNewTab(options) | ||||
|     call self.open(extend({'where': 't'}, a:options)) | ||||
| endfunction | ||||
|  | ||||
| " FUNCTION: TreeFileNode.openExplorer() | ||||
| function! s:TreeFileNode.openExplorer() | ||||
|     execute "wincmd p" | ||||
|     execute "edit ".self.path.getParent().str({'format':'Edit'}) | ||||
| endfunction | ||||
|  | ||||
| " FUNCTION: TreeFileNode.putCursorHere(isJump, recurseUpward){{{1 | ||||
| " Places the cursor on the line number this node is rendered on | ||||
| " | ||||
|  | ||||
| @ -355,12 +355,15 @@ endfunction | ||||
| " scroll position | ||||
| function! s:UI.saveScreenState() | ||||
|     let win = winnr() | ||||
|     call g:NERDTree.CursorToTreeWin() | ||||
|     let self._screenState = {} | ||||
|     let self._screenState['oldPos'] = getpos(".") | ||||
|     let self._screenState['oldTopLine'] = line("w0") | ||||
|     let self._screenState['oldWindowSize']= winwidth("") | ||||
|     call nerdtree#exec(win . "wincmd w", 1) | ||||
|     try | ||||
|         call g:NERDTree.CursorToTreeWin() | ||||
|         let self._screenState['oldPos'] = getpos(".") | ||||
|         let self._screenState['oldTopLine'] = line("w0") | ||||
|         let self._screenState['oldWindowSize']= winwidth("") | ||||
|         call nerdtree#exec(win . "wincmd w", 1) | ||||
|     catch | ||||
|     endtry | ||||
| endfunction | ||||
|  | ||||
| " FUNCTION: s:UI.setShowHidden(val) {{{1 | ||||
|  | ||||
| @ -369,7 +369,11 @@ endfunction | ||||
| function! NERDTreeCopyPath() | ||||
|     let l:nodePath = g:NERDTreeFileNode.GetSelected().path.str() | ||||
|     if has("clipboard") | ||||
|         let @* = l:nodePath | ||||
|         if &clipboard == "unnamedplus" | ||||
|             let @+ = l:nodePath | ||||
|         else | ||||
|             let @* = l:nodePath | ||||
|         endif | ||||
|         call nerdtree#echo("The path [" . l:nodePath . "] was copied to your clipboard.") | ||||
|     else | ||||
|         call nerdtree#echo("The full path is: " . l:nodePath) | ||||
|  | ||||
| @ -48,6 +48,7 @@ call s:initVariable("g:NERDTreeAutoCenterThreshold", 3) | ||||
| call s:initVariable("g:NERDTreeCaseSensitiveSort", 0) | ||||
| call s:initVariable("g:NERDTreeNaturalSort", 0) | ||||
| call s:initVariable("g:NERDTreeSortHiddenFirst", 1) | ||||
| call s:initVariable("g:NERDTreeUseTCD", 0) | ||||
| call s:initVariable("g:NERDTreeChDirMode", 0) | ||||
| call s:initVariable("g:NERDTreeCreatePrefix", "silent") | ||||
| call s:initVariable("g:NERDTreeMinimalUI", 0) | ||||
| @ -170,10 +171,10 @@ call nerdtree#ui_glue#setupCommands() | ||||
| "============================================================ | ||||
| augroup NERDTree | ||||
|     "Save the cursor position whenever we close the nerd tree | ||||
|     exec "autocmd BufLeave ". g:NERDTreeCreator.BufNamePrefix() ."* if g:NERDTree.IsOpen() | call b:NERDTree.ui.saveScreenState() | endif" | ||||
|     exec "autocmd BufLeave,WinLeave ". g:NERDTreeCreator.BufNamePrefix() ."* if g:NERDTree.IsOpen() | call b:NERDTree.ui.saveScreenState() | endif" | ||||
|  | ||||
|     "disallow insert mode in the NERDTree | ||||
|     exec "autocmd BufEnter ". g:NERDTreeCreator.BufNamePrefix() ."* stopinsert" | ||||
|     exec "autocmd BufEnter,WinEnter ". g:NERDTreeCreator.BufNamePrefix() ."* stopinsert" | ||||
| augroup END | ||||
|  | ||||
| if g:NERDTreeHijackNetrw | ||||
| @ -183,6 +184,12 @@ if g:NERDTreeHijackNetrw | ||||
|     augroup END | ||||
| endif | ||||
|  | ||||
| if g:NERDTreeChDirMode == 3 | ||||
|     augroup NERDTreeChDirOnTabSwitch | ||||
|         autocmd TabEnter * if g:NERDTree.ExistsForTab()|call g:NERDTree.ForCurrentTab().getRoot().path.changeToDir()|endif | ||||
|     augroup END | ||||
| endif | ||||
|  | ||||
| " SECTION: Public API {{{1 | ||||
| "============================================================ | ||||
| function! NERDTreeAddMenuItem(options) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Amir Salihefendic
					Amir Salihefendic