如何将NERDTree添加到您的.vimrc文件

129

如何将NERDTree添加到我的.vimrc文件中?


我更新了我的回答。我不确定你是否可以将它添加到你的 .vimrc 中以实现你想要的功能,但我知道你可以通过命令行运行 vim 以自动打开 NERDTree。看一下 :) - Steven Kryskalla
7个回答

214

好的,前一个版本可能有点简洁,但你要找的答案是将下面这行代码添加到你的~/.vimrc文件中。它告诉Vim你想设置一个命令在Vim启动时运行,但由于它依赖于各种插件加载,你不想在初始化完成之前运行它:

autocmd VimEnter * NERDTree

然而,如果你对光标始终在NERDTree窗口中启动感到烦恼,你可以添加第二个自动命令来将光标移动到主窗口中:

autocmd VimEnter * NERDTree
autocmd VimEnter * wincmd p

我不知道为什么,但这对我不起作用。无论如何,我必须在vim中调用:NERDTreeToggle才能显示nerdtree。 - hgf
如果您正在使用像vimpager这样的脚本,您应该将这些行移动到您的/.vim/after/plugin/NERD_tree.vim脚本中,以便它不会在插件关闭时尝试执行。 - Joshua Olson
10
不需要两个独立的自动命令:autocmd VimEnter * NERDTree | wincmd p 可以实现你的需求。 - Dave James Miller
我能否直接指定我想要启动的实际路径?- 是的,可以使用一个文件夹(末尾不要有斜杠)。 - AturSams
3
我更喜欢执行以下操作:`autocmd VimEnter * NERDTree` 然后 `autocmd VimEnter * if argc() | wincmd p | endif`.这样,如果我没有打开特定文件,光标将在 NERDTree 上,但如果我选择了文件,则会在主窗口中开始。 - user2275806
我正在尝试在neovim 0.4.4(发布版)中设置NERDTree,但它无法正常工作。我从项目的github页面复制了autocmd代码片段。 - Caesar23

24

我希望在启动vim时,仅在没有文件参数时显示NERDTree,因此我将以下内容添加到我的.vimrc文件中:

autocmd VimEnter * if !argc() | NERDTree | endif

20
你是在Windows还是Unix系统上?
如果你是在Unix系统上,你需要将插件放在 ~/.vim/plugin 目录下。这是我的插件目录的样子:
$ ls ~/.vim/plugin
NERD_tree.vim  scratch.vim  scratchfind.vim

接下来它会立即开始工作。尝试像这样运行vim:

$ vim .

它应该在NERD树视图中打开当前目录。

如果您使用的是Windows,则将插件放在此处:C:\Program Files\Vim\vim70\plugin


要在启动vim时自动加载NERDTree,请从命令行以以下方式运行:

$ vim -c "NERDTree" some_file.txt

你可以在你的.bashrc文件中设置别名:
alias vimt='vim -c "NERDTree" $1'

现在,每当您运行vimt(而不是vim)时,还会在窗口左侧打开NERDTree。
您也可以在.vimrc中添加一个快捷键来启动NERDTree,如下所示:
function OpenNERDTree()
  execute ":NERDTree"
endfunction
command -nargs=0 OpenNERDTree :call OpenNERDTree()

nmap <ESC>t :OpenNERDTree<CR>

现在,当你按下Esc,然后再按t,它会弹出NERDTree。

我正在运行一个类Unix的机器。我已经安装了NERDTree,我需要的是在命令行中输入vim时启动NERDTree。这样一个文件浏览器就会一直打开在左边,就像在Textmate中一样。我不知道在vimrc中要放什么来实现这个功能,我尝试过:NERDTree,但它似乎无法识别该命令... - chutsu
2
我想补充一下,其实有一个内置的:NERDTreeToggle映射可以使用,这样你就不需要自定义函数了。 - Gavin Gilmour
1
优秀的技巧 alias vimt='vim -c "NERDTree" $1' - pedrosaurio

9
根据NERDTree指南,你可以使用pathogen.vim。按照以下方式安装它:
mkdir -p ~/.vim/autoload ~/.vim/bundle; \
curl -Sso ~/.vim/autoload/pathogen.vim \
        https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim

将以下内容添加到你的 .vimrc 文件中:
execute pathogen#infect()

然后安装NERDTree:

cd ~/.vim/bundle
git clone https://github.com/scrooloose/nerdtree.git

如果您希望在Vim启动时自动打开NERDTree,请将以下内容添加到您的.vimrc文件中:

autocmd vimenter * NERDTree

7
这里的答案有一个小问题。
如果您调用vim --noplugin或使用一个使用--noplugin模式的脚本,例如vimpager,将会导致此错误:
Error detected while processing VimEnter Auto commands for "*":
E492: Not an editor command: NERDTree

为了避免这种情况,请将命令放在~/.vim/after/plugin/NERD_tree.vim中:
autocmd VimEnter * NERDTree

同时测试一下 NERDtree 是否可用也是个好主意,例如:

if exists("loaded_nerd_tree")
    autocmd VimEnter * NERDTree
endif

1
不错...我也使用Vim作为分页程序,只需添加一个参数即可禁用自动命令...export MANPAGER='col -bx | mvim -c ":set ft=man nonu nolist" -c ":autocmd!" -M -R - > /dev/null 2>&1' - Edward J Beckett

7
" NERD Tree
nmap <silent> <special> <F2> :NERDTreeToggle<RETURN>

1

我希望在启动时打开NERDTree,但有两个要求:

  • 只有在没有参数(文件参数)的情况下才打开NERDTree
  • 仅显示NERDTree窗口(不想显示主窗口)

我使用这个命令:

autocmd VimEnter * if !argc() | NERDTree | wincmd p | q | endif

更新(2022年1月9日)

我找到了一种更高效的方法,以满足我上面提到的两个要求。

从 .vimrc 文件中删除我上面提到的 autocmd。相反,创建一个类似这样的别名:

vim() {
  if [ $# -eq 0 ]; then
    /usr/bin/vim ./
  else
    /usr/bin/vim "$@"
  fi
}

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