2019-12-31 14:55:37 +08:00
The NERDTree [![Vint ](https://github.com/preservim/nerdtree/workflows/Vint/badge.svg )](https://github.com/preservim/nerdtree/actions?workflow=Vint)
2011-12-24 18:58:57 +08:00
=============
2017-07-29 08:38:26 +08:00
Introduction
------------
2011-12-24 18:58:57 +08:00
2017-07-29 08:38:26 +08:00
The NERDTree is a file system explorer for the Vim editor. Using this plugin,
2017-07-29 08:47:14 +08:00
users can visually browse complex directory hierarchies, quickly open files for
reading or editing, and perform basic file system operations.
This plugin can also be extended with custom mappings using a special API. The
details of this API and of other NERDTree features are described in the
included documentation.
2011-12-24 18:58:57 +08:00
2019-12-31 15:55:03 +08:00
![NERDTree Screenshot ](https://github.com/preservim/nerdtree/raw/master/screenshot.png )
2011-12-24 18:58:57 +08:00
Installation
------------
2019-10-22 13:21:23 +08:00
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.
2019-10-14 21:13:20 +08:00
2019-10-22 13:21:23 +08:00
#### Vim 8+ packages
2019-10-14 21:13:20 +08:00
2019-10-22 13:21:23 +08:00
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:
2019-10-14 21:13:20 +08:00
2019-10-22 13:21:23 +08:00
```bash
2019-12-31 15:55:03 +08:00
git clone https://github.com/preservim/nerdtree.git ~/.vim/pack/vendor/start/nerdtree
2019-10-22 13:21:23 +08:00
vim -u NONE -c "helptags ~/.vim/pack/vendor/start/nerdtree/doc" -c q
```
2011-12-24 18:58:57 +08:00
2019-10-22 13:21:23 +08:00
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.
2011-12-24 18:58:57 +08:00
2019-10-22 13:21:23 +08:00
#### [pathogen.vim](https://github.com/tpope/vim-pathogen)
2011-12-24 18:58:57 +08:00
2019-10-22 13:21:23 +08:00
In the terminal,
```bash
2019-12-31 15:55:03 +08:00
git clone https://github.com/preservim/nerdtree.git ~/.vim/bundle/nerdtree
2019-10-22 13:21:23 +08:00
```
In your vimrc,
```vim
call pathogen#infect()
syntax on
filetype plugin indent on
```
Then reload vim, run `:helptags ~/.vim/bundle/nerdtree/doc/` or `:Helptags` .
#### [Vundle.vim](https://github.com/VundleVim/Vundle.vim)
```vim
call vundle#begin()
2019-12-31 15:55:03 +08:00
Plugin 'preservim/nerdtree'
2019-10-22 13:21:23 +08:00
call vundle#end()
```
#### [vim-plug](https://github.com/junegunn/vim-plug)
```vim
call plug#begin()
2019-12-31 15:55:03 +08:00
Plug 'preservim/nerdtree'
2019-10-22 13:21:23 +08:00
call plug#end()
```
2011-12-24 18:58:57 +08:00
2020-02-08 01:42:47 +08:00
#### [dein.vim](https://github.com/Shougo/dein.vim)
```vim
call dein#begin()
call dein#add('preservim/nerdtree')
call dein#end()
```
2017-03-27 02:51:09 +08:00
#### [apt-vim](https://github.com/egalpin/apt-vim)
2019-10-22 13:21:23 +08:00
```bash
2019-12-31 15:55:03 +08:00
apt-vim install -y https://github.com/preservim/nerdtree.git
2019-10-22 13:21:23 +08:00
```
2015-07-30 20:52:17 +08:00
2019-12-31 15:55:03 +08:00
F.A.Q. (here, and in the [Wiki ](https://github.com/preservim/nerdtree/wiki ))
2017-07-29 08:38:26 +08:00
------
2011-12-24 18:58:57 +08:00
2019-10-22 13:21:23 +08:00
#### Is there any support for `git` flags?
2011-12-28 05:52:43 +08:00
2015-05-02 19:01:22 +08:00
Yes, install [nerdtree-git-plugin ](https://github.com/Xuyuanp/nerdtree-git-plugin ).
2011-12-24 18:58:57 +08:00
2016-03-06 06:03:23 +08:00
---
2019-10-22 13:21:23 +08:00
#### Can I have the nerdtree on every tab automatically?
2012-01-04 19:44:54 +08:00
2015-05-02 19:01:22 +08:00
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
http://stackoverflow.com/questions/102384/using-vims-tabs-like-buffers
2012-01-04 19:44:54 +08:00
2015-05-02 19:01:22 +08:00
If you are interested in this behaviour then consider [vim-nerdtree-tabs ](https://github.com/jistr/vim-nerdtree-tabs )
2012-01-04 19:44:54 +08:00
2016-03-06 06:03:23 +08:00
---
2019-10-22 13:21:23 +08:00
#### How can I open a NERDTree automatically when vim starts up?
2015-05-02 19:01:22 +08:00
Stick this in your vimrc: `autocmd vimenter * NERDTree`
2016-03-06 06:03:23 +08:00
---
2019-10-22 13:21:23 +08:00
#### How can I open a NERDTree automatically when vim starts up if no files were specified?
2015-05-02 19:01:22 +08:00
2015-11-27 02:57:38 +08:00
Stick this in your vimrc:
2019-10-22 13:21:23 +08:00
```vim
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 & & !exists("s:std_in") | NERDTree | endif
```
2012-01-04 19:44:54 +08:00
2015-11-27 02:57:38 +08:00
Note: Now start vim with plain `vim` , not `vim .`
2016-10-09 15:26:48 +08:00
---
2019-10-22 13:21:23 +08:00
#### 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
```
2016-10-09 15:11:27 +08:00
2019-10-22 13:21:23 +08:00
---
#### 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
```
2016-10-09 15:26:48 +08:00
2016-10-11 03:16:00 +08:00
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.
2016-10-09 15:11:27 +08:00
2019-03-06 00:25:49 +08:00
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`
2016-03-06 06:03:23 +08:00
---
2019-10-22 13:21:23 +08:00
#### How can I map a specific key or shortcut to open NERDTree?
2013-01-01 02:15:55 +08:00
2015-05-02 19:01:22 +08:00
Stick this in your vimrc to open NERDTree with `Ctrl+n` (you can set whatever key you want):
2019-10-22 13:21:23 +08:00
```vim
map < C-n > :NERDTreeToggle< CR >
```
2013-01-01 02:15:55 +08:00
2016-03-06 06:03:23 +08:00
---
2019-10-22 13:21:23 +08:00
#### How can I close vim if the only window left open is a NERDTree?
2012-01-04 19:44:54 +08:00
2015-05-02 19:01:22 +08:00
Stick this in your vimrc:
2019-10-22 13:21:23 +08:00
```vim
autocmd bufenter * if (winnr("$") == 1 & & exists("b:NERDTree") & & b:NERDTree.isTabTree()) | q | endif
```
2015-05-13 03:57:49 +08:00
2016-03-06 06:03:23 +08:00
---
2019-10-22 13:21:23 +08:00
#### Can I have different highlighting for different file extensions?
2015-05-13 03:57:49 +08:00
2019-12-31 15:55:03 +08:00
See here: https://github.com/preservim/nerdtree/issues/433#issuecomment-92590696
2015-09-12 01:44:06 +08:00
2016-03-06 06:03:23 +08:00
---
2019-10-22 13:21:23 +08:00
#### How can I change default arrows?
2015-09-12 01:44:06 +08:00
Use these variables in your vimrc. Note that below are default arrow symbols
2019-10-22 13:21:23 +08:00
```vim
let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'
```
2020-02-07 02:01:04 +08:00
You can remove the arrows altogether by setting these variables to empty strings, as shown below. This will remove not only the arrows, but a single space following them, shifting the whole tree two character positions to the left.
```vim
let g:NERDTreeDirArrowExpandable = ''
let g:NERDTreeDirArrowCollapsible = ''
```