重新映射NERDTree双击到'T'

时间:2012-05-20 01:30:36

标签: vim vi nerdtree

使用VIM NERDTree插件。

有没有办法重新映射双击文件操作以在新选项卡中静默打开文件( T )?

2 个答案:

答案 0 :(得分:7)

1简介

这适用于NERD树版本4.2.0

2在新标签页中打开目录和文件

如果您想在新标签页中打开目录文件,只需将以下行添加到~/.vimrc即可。

let g:NERDTreeMapOpenInTabSilent = '<2-LeftMouse>'

3仅在新标签页中打开文件

如果您 想要在新标签页中打开文件,则必须执行更复杂的操作。

NERD_tree.vim中的某处添加此功能:

" opens a file in a new tab
" KeepWindowOpen - dont close the window even if NERDTreeQuitOnOpen is set
" stayCurrentTab: if 1 then vim will stay in the current tab, if 0 then vim
" will go to the tab where the new file is opened
function! s:openInTabAndCurrent(keepWindowOpen, stayCurrentTab)
    if getline(".") ==# s:tree_up_dir_line
        return s:upDir(0)
    endif

    let currentNode = s:TreeFileNode.GetSelected()
    if currentNode != {}
        let startToCur = strpart(getline(line(".")), 0, col("."))

        if currentNode.path.isDirectory
            call currentNode.activate(a:keepWindowOpen)
            return
        else
            call s:openInNewTab(a:stayCurrentTab)
            return
        endif
    endif
endfunction

并替换

nnoremap <silent> <buffer> <2-leftmouse> :call <SID>activateNode(0)<cr>

使用:

nnoremap <silent> <buffer> <2-leftmouse> :call <SID>openInTabAndCurrent(0,1)<cr>

您可以在文件s:bindMappings()中的函数NERD_tree.vim中找到此行。

答案 1 :(得分:2)

虽然我的NERDtree版本也报告为4.2.0(git cloned 2015-07-22),但同时似乎有一些重大的重构,因此jens-na在第(3)节中的解决方案确实如此。不转移(但似乎仍然没有开箱即用的解决方案)。我必须在autoload / nerdtree / ui_glue.vim中替换一行,如下面的差异。 (注意:在MacVim上测试)

--- .vim/bundle/nerdtree/autoload/nerdtree/ui_glue.vim.backup    2015-07-22 19:39:53.000000000 +0200
+++ .vim/bundle/nerdtree/autoload/nerdtree/ui_glue.vim  2015-07-22 19:40:44.000000000 +0200
@@ -10,7 +10,7 @@
     call NERDTreeAddKeyMap({ 'key': '<MiddleRelease>', 'scope': "all", 'callback': s."handleMiddleMouse" })
     call NERDTreeAddKeyMap({ 'key': '<LeftRelease>', 'scope': "all", 'callback': s."handleLeftClick" })
     call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "DirNode", 'callback': s."activateDirNode" })
-    call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "FileNode", 'callback': s."activateFileNode" })
+    call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "FileNode", 'callback': s."openInNewTab" })
     call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "Bookmark", 'callback': s."activateBookmark" })
     call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "all", 'callback': s."activateAll" })