2012-05-20 7 views
10

Verwendung von VIM NERDTree Plugin.remap NERDTree Doppelklick auf 'T'

Gibt es eine Möglichkeit, den Doppelklick auf eine Dateiaktion erneut zuzuordnen, um die Datei automatisch in einem neuen Register zu öffnen (T)?

+0

Shift + t auf eine beliebige Datei in NERDTree. Oh Entschuldigung, lies einfach die Frage noch einmal. Sie benötigten eine Zuordnung und öffneten die Datei nicht einfach im Hintergrund. Versuchen Sie – kiddorails

+0

Sie müssen wahrscheinlich [NERDTree-Code] (https://github.com/scroloose/nerdtree/blob/master/plugin/NERD_tree.vim#L2869) selbst bearbeiten. – romainl

Antwort

6

1 Einleitung

Dies funktioniert für NERD Baum Version 4.2.0.

2 Öffnen von Verzeichnissen und Dateien in einem neuen Tab

Wenn Sie möchten, Verzeichnisse öffnen und Dateien in einem neuen Tab Sie einfach die folgende Zeile in ~/.vimrc hinzufügen können.

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

3 Nur offene Dateien in einem neuen Tab

Wenn Sie nurDateien in einem neuen Tab Sie etwas anspruchsvollere zu tun haben, öffnen möchten.

Fügen Sie diese Funktion irgendwo in 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 

und ersetzen Sie die Zeile

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

mit:

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

Sie diese Zeile in der Funktion s:bindMappings() in der Datei finden NERD_tree.vim.

2

Obwohl meine NERDtree-Version auch als 4.2.0 (Git geklont 2015-07-22) gemeldet wird, scheint es in der Zwischenzeit einige größere Umgestaltungen gegeben zu haben, daher die Lösung von jens-na in Abschnitt (3) nicht übertragen (aber es scheint immer noch keine Out-of-the-Box-Lösung zu sein). Ich musste eine Linie in autoload/nerdtree/ui_glue.vim ersetzen, wie unten das diff. (Hinweis: auf MacVim getestet)

--- .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

Dies scheint der einzige Weg, dies für den aktuellen NERDTree zu tun, hat auch keine Probleme mit Doppelklick auf Dirs (mit Linux mit GVim). – kjyv