NERDTree实时预览(如崇高的侧边栏)

时间:2015-02-08 16:18:16

标签: vim sublimetext nerdtree

Sublime的侧边栏有一个很酷的功能,我可以按箭头键快速浏览编辑器窗格中每个文件的样子。它实际上并没有打开文件 - 只是在编辑器窗格中显示它。

我想在Vim中使用NERDTree做同样的事情(或者醋/ netrw,并不重要)。我知道NERDTree允许我使用go打开光标下的文件,同时保持树的焦点,但(a)需要两次击键,(b)它为每个文件创建一个新的缓冲区I&#34 ;预览"像这样,所以...真的不是预览。

有没有办法让NERDTree或Vim模仿这个Sublime功能?

3 个答案:

答案 0 :(得分:10)

是的,有。 Vim有一个名为&#34;预览窗口&#34;的功能。您可以使用:pedit <filename>在预览窗口中打开文件。如果要将其插入NERDTree,可以在~/.vim/nerdtree_plugin/目录中创建一个文件,例如&#34; live_preview_mapping.vim&#34;,其中包含以下内容:

if exists("g:loaded_nerdree_live_preview_mapping")
  finish
endif
let g:loaded_nerdree_live_preview_mapping = 1

call NERDTreeAddKeyMap({
      \ 'key':           '<up>',
      \ 'callback':      'NERDTreeLivePreview',
      \ 'quickhelpText': 'preview',
      \ })

function! NERDTreeLivePreview()
  " Get the path of the item under the cursor if possible:
  let current_file = g:NERDTreeFileNode.GetSelected()

  if current_file == {}
    return
  else
    exe 'pedit '.current_file.path.str()
  endif
endfunction

第一部分只是一个加载保护,所以文件只来源一次,只是样板。第二部分使用NERDTree API为调用给定回调函数的<up>键添加一个键映射。

回调函数是代码的核心,但它应该很容易理解 - 它接受光标下的节点(如果有的话),并使用文件名执行:pedit

使用简单的特定于文件类型的映射,您甚至可以更轻松地完成此操作,如下所示:

autocmd FileType nerdtree nnoremap <buffer> <up> :call NERDTreeLivePreview()<cr>

但前者是插件推荐的方法(参见:help NERDTreeAPI)。如果没有别的,这会为?键添加一个帮助条目,并在一个地方保留nerdtree扩展名。

有关您可以使用预览窗口执行的操作的详细信息,请尝试:help preview-window。例如,您可以使用<c-w>z关闭它,但是您可以将其映射到您喜欢的任何内容,这与NERDTree不再真正相关。如果您对窗口出现的位置不满意,请考虑更改&#34; pedit&#34; to&#34; botright pedit&#34;或者&#34; leftabove pedit&#34;或者你想要什么。查看:leftabove的帮助,然后查看下面的相关命令。

答案 1 :(得分:0)

使用netrw,预览文件:将光标放在文件顶部,按&#34; p&#34;。

答案 2 :(得分:0)

NERDTree 不提供任何开箱即用的自动功能。我喜欢一个预览窗口,它可以劫持最后一个活动窗口并允许在那里打开缓冲区,或者与原始缓冲区分开。这个扩展就是这样做的,而且它的源代码很短。

https://github.com/numEricL/nerdtree-live-preview