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

我想在Vim中使用NERDTree做同样的事情(或Vinegar/netrw,并不重要)。我知道NERDTree可以让我使用go在树下保持焦点的同时打开光标下的文件,但是(a)需要两次击键,并且(b)像这样“预览”的每个文件都会创建一个新缓冲区,因此...确实没有太多预览。

有没有办法使NERDTree或Vim模拟此Sublime功能?

最佳答案

就在这里。 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

第一部分只是一个负载保护程序,因此该文件仅获得一次,只是样板文件。第二部分使用NERDTree API为<up>键添加一个键映射,该键调用给定的回调函数。

回调函数是代码的主要内容,但它应该很容易理解-它将光标所在的节点(如果有的话)带到该节点下,并使用文件名执行:pedit

您甚至可以通过简单的特定于文件类型的映射来更轻松地执行此操作,如下所示:
autocmd FileType nerdtree nnoremap <buffer> <up> :call NERDTreeLivePreview()<cr>

但是前者是插件推荐的方法(请参阅:help NERDTreeAPI)。如果没有其他问题,这会为它的?键添加一个帮助条目,并将nerdtree扩展保留在一个位置。

有关预览窗口功能的更多信息,请尝试:help preview-window。例如,您可以使用<c-w>z将其关闭,但是您可以将其映射到所需的任何内容,而这与NERDTree不再真正相关。如果您对窗口的显示位置不满意,请考虑将“pedit”更改为“bottom pedit”或“leftabove pedit”或您想要的任何内容。查看:leftabove的帮助,并查看下面的相关命令。

关于vim - NERDTree实时预览(如Sublime侧边栏),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28396256/

10-12 20:57