Sublime的侧边栏有一个很酷的功能,我可以按箭头键快速浏览编辑器窗格中每个文件的样子。它实际上并没有打开文件 - 只是在编辑器窗格中显示它。
我想在Vim中使用NERDTree做同样的事情(或者醋/ netrw,并不重要)。我知道NERDTree允许我使用go
打开光标下的文件,同时保持树的焦点,但(a)需要两次击键,(b)它为每个文件创建一个新的缓冲区I&#34 ;预览"像这样,所以...真的不是预览。
有没有办法让NERDTree或Vim模仿这个Sublime功能?
答案 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 不提供任何开箱即用的自动功能。我喜欢一个预览窗口,它可以劫持最后一个活动窗口并允许在那里打开缓冲区,或者与原始缓冲区分开。这个扩展就是这样做的,而且它的源代码很短。