自动打开vim中的NERDTree

42

有谁知道如何强制让.vimrc在每次调用vim时自动打开NERDTree?操作系统是*nix。

7个回答

82
 au VimEnter *  NERDTree

在你的vimrc文件中添加这一行即可。

如需更多信息,请查阅:he autocmd.txt。


46

如果命令行中没有文件时,您也可以打开Nerd Tree:

function! StartUp()
    if 0 == argc()
        NERDTree
    end
endfunction

autocmd VimEnter * call StartUp()

本文摘自Ovid的博客文章


非常好的提示。谢谢你。(我不知道为什么以前没有人点赞它)。 - ereOn
这应该是被接受的解决方案。当树在作为CLI参数传递文件时打开,并且每次都需要C-WW时,这真是个麻烦事。 - Kit Plummer

10
当未提供文件参数时,打开NERDTree的一条命令是:
autocmd vimenter * if !argc() | NERDTree | endif
OR
au vimenter * if !argc() | NERDTree | endif

以上代码仅检查是否未提供任何参数,然后打开NERDTree

2
如果你正在寻找一种方法来拥有一个持久的 NERDTree,即使你打开新的标签页也能保留它,最好使用 jistr/vim-nerdtree-tabs 并在你的 .vimrc 中添加以下内容:
let g:nerdtree_tabs_open_on_console_startup=1

这个软件包不再维护了,但它仍然可以使用,我也不知道有什么等效的替代品。

2

在@zoul的答案基础上,我想要当我指定一个目录或者什么都不指定时,默认打开NERDTree,并且如果我只指定一个文件,则不打开它,因此我最终得到了以下代码:

function! StartUp()
    if !argc() && !exists("s:std_in")
        NERDTree
    end
    if argc() && isdirectory(argv()[0]) && !exists("s:std_in")
        exe 'NERDTree' argv()[0]
        wincmd p
        ene
    end
endfunction

autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * call StartUp()

0
在你的vim配置文件中(我使用nvim,所以对我来说它在~/.config/nvim/init.vim),在文件的任何位置添加以下行:au VimEnter * NERDTree

0

在 NERDTree 文档中有一个官方答案。

https://github.com/preservim/nerdtree#how-do-i-open-nerdtree-automatically-when-vim-starts

" Start NERDTree and leave the cursor in it.
autocmd VimEnter * NERDTree

" Start NERDTree and put the cursor back in the other window.
autocmd VimEnter * NERDTree | wincmd p

" Start NERDTree when Vim is started without file arguments.
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists('s:std_in') | NERDTree | endif

" Start NERDTree. If a file is specified, move the cursor to its window.
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * NERDTree | if argc() > 0 || exists("s:std_in") | wincmd p | endif

" Start NERDTree, unless a file or session is specified, eg. vim -S session_file.vim.
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists('s:std_in') && v:this_session == '' | NERDTree | endif

" Start NERDTree when Vim starts with a directory argument.
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') |
    \ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接