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

ezu*_*zuk 4 vim nerdtree sublimetext

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

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

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

And*_*dev 10

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

autocmd FileType nerdtree nnoremap <buffer> <up> :call NERDTreeLivePreview()<cr>
Run Code Online (Sandbox Code Playgroud)

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

有关使用预览窗口可以执行的操作的详细信息,请尝试:help preview-window.例如,您可以将其关闭<c-w>z,但您可以将其映射到您想要的任何内容,这与NERDTree不再相关.如果您对窗口出现的位置不满意,请考虑将"pedit"更改为"botright pedit"或"leftabove pedit"或任何您想要的内容.查看帮助:leftabove并查看下面的相关命令.