NERDTree如何打开文件并自动关闭资源管理器缓冲区


10

使用NERDTree插件时,默认行为是打开一个新文件并保持NERDTree缓冲区打开。我想要做的是保留此默认行为,但也可以在需要时覆盖它,以便打开文件后将关闭NERDTree缓冲区。

我知道let NERDTreeQuitOnOpen=1当我打开新文件时可以用来自动关闭NERDTree缓冲区,但是此选项完全覆盖默认行为(这不是我想要的)。

理想情况下,我想知道NERDTree中是否有内置功能来执行我想要的操作。(我一直在搜索,但没有找到类似的东西,所以我想它实际上不存在)

如果不存在,我有两个想法:

  • 首先是创建一个将设置NERDTreeQuitOnOpen为的功能1,打开文件,然后再次NERDTreeQuitOnOpen将其设置为0

  • 第二个是创建以下映射:map d<CR> <CR> :NERDTree <CR> :bd<CR>打开文件(第一个<CR>),返回到NERDTree缓冲区(:NERDTree <CR>),然后关闭该缓冲区(:bd <CR>)。我应该改进它,以便映射仅存在于NERDTree缓冲区中,但是我认为这是一个非常丑陋的解决方案,我认为可以对其进行改进。

哪个主意最好,为什么?还是有更好的选择?



@Peter:感谢您的评论,本文非常有趣,我可能会尝试netrw和split Explorer的概念。我认为我了解本文所介绍内容的优点,但是问题在于它实际上并不能解决我的问题,它只是建议更改我使用的工具。我不反对改变自己的习惯,但我想先解决我的问题,然后再尝试使用新工具:)
statox

有关SU的相关未解决问题:superuser.com/q/821720/334516。也许map d<cr> <cr>:NERDTreeClose<cr>用于映射?
muru

@muru:谢谢,您的映射工作正常,并且看起来不像我的那么丑:)关于SU的问题,我不确定它是否完全相关,因为他想在NERDTree的缓冲区中打开文件,而我想在一个新的缓冲区中打开它,然后关闭NERDTree缓冲区:他以一个分割窗口结尾,而我想以2个不在分割窗口中的缓冲区结尾。
statox

Answers:


5

由于该问题似乎并未产生很多答案,因此我将在@muru的建议下回答该问题,这是我切换到netrw资源管理器之前一个星期使用的建议。(当然,如果出现更好的选择答案,我会很高兴地取消我的标记为接受并接受新的答案)

这个想法是使用以下映射:

map d<cr> <cr>:NERDTreeClose<cr>

它将按通常的方式打开文件,然后调用函数以关闭NERDTree缓冲区,无论光标位于何处。

编辑:我最近切换回NERDTree并重新设计了我的解决方案:我之前建议的映射正在起作用,但是由于它存在于每个缓冲区中,因此d每次我想删除一些令人讨厌的东西时,都必须双击两次。(也许我可以更改timeout设置,但是我喜欢当前为我设置的方式,也不想将其映射到另一个组合键上)。

因此,我用以下几行替换了我的第一个解决方案.vimrc

autocmd BufEnter NERD_tree_* nmap  d<CR> <CR> :NERDTreeToggle <CR>
autocmd BufLeave NERD_tree_* unmap d<CR>

这样,映射仅在NERDTree缓冲区中创建,并且不会与其他缓冲区中的工作流混淆。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.