2012-05-20 16 views
10

Uso de VIM NERDTree Plugin.reasignación NERDTree Doble clic en 'T'

¿Hay alguna forma de reasignar el doble clic en una acción de archivo para abrir el archivo de forma silenciosa en una nueva pestaña (T)?

+0

Shift + t en cualquier archivo en NERDTree. Oh, lo siento, solo vuelve a leer la pregunta. Necesitabas mapear y no solo abrir silenciosamente el archivo. Probando – kiddorails

+0

Es probable que necesite editar [código de NERDTree] (https://github.com/scrooloose/nerdtree/blob/master/plugin/NERD_tree.vim#L2869) usted mismo. – romainl

Respuesta

6

1 Introducción

Esto funciona para NERD versión árbol 4.2.0.

2 directorios y archivos abiertos en una nueva pestaña

Si desea abrir directorios y archivos en una nueva pestaña simplemente puede añadir la siguiente línea a su ~/.vimrc.

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

3 archivos sólo está abierto en una pestaña nueva

Si única desea abrir archivos en una nueva pestaña que tiene que hacer algo más sofisticado.

Añadir esta función en algún lugar de 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 

y reemplazar la línea

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

con:

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

puede encontrar esta línea en la función s:bindMappings() en el archivo NERD_tree.vim.

2

Aunque mi versión de NERDtree también se informa como 4.2.0 (git clonado el 2015-07-22), parece haber habido algunas refactorizaciones importantes mientras tanto, de ahí la solución de jens-na en la sección (3) no se transfirió (pero tampoco parece haber una solución lista para usar). Tuve que reemplazar una línea en autocarga/nerdtree/ui_glue.vim, según la diferencia a continuación. (Nota: probado en 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" }) 
+0

Esta parece ser la única forma de hacerlo para el NERDTree actual, tampoco tiene problemas con hacer doble clic en directorios (usando Linux con GVim). – kjyv

Cuestiones relacionadas