2012-05-20 14 views
10

Przy użyciu wtyczki VIM NERDTree.remap NERDTree Kliknij dwukrotnie, aby "T"

Czy istnieje sposób na remapowanie dwukrotnego kliknięcia akcji pliku, aby otworzyć plik po cichu w nowej zakładce (T)?

+0

Shift + t na dowolnym pliku w NERDTree. Och, przepraszam, po prostu przeczytaj ponownie pytanie. Wymagane jest mapowanie, a nie tylko ciche otwarcie pliku. Próbowanie – kiddorails

+0

Najprawdopodobniej będziesz musiał samodzielnie zmodyfikować kod [NERDTree's code] (https://github.com/scrooloose/nerdtree/blob/master/plugin/NERD_tree.vim#L2869). – romainl

Odpowiedz

6

1 Wprowadzenie

Działa to dla NERD drzewa wersji 4.2.0.

2 Otwartych katalogów i plików w nowej karcie

Jeśli planujesz otworzyć katalogi i pliki w nowej karcie można po prostu dodać następującą linię do ~/.vimrc.

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

3 otwarte tylko pliki w nowej karcie

Jeśli tylko chcą otworzyć plików w nowej karcie trzeba zrobić coś bardziej wyrafinowane.

Dodaj tę funkcję gdzieś w 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 

i zamienić linię

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

z:

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

można znaleźć ten wiersz w funkcji s:bindMappings() w pliku NERD_tree.vim.

2

Chociaż moja wersja NERDtree jest również zgłaszana jako 4.2.0 (git sklonowany 2015-07-22), wydaje się, że w międzyczasie nastąpiło kilka istotnych zmian, stąd rozwiązanie wg Jeny-na w sekcji (3) nie zostały przeniesione (ale nadal nie wygląda na gotowe rozwiązanie). Musiałem zamienić wiersz w autoload/nerdtree/ui_glue.vim, jak na poniższym rysunku. (Uwaga: przetestowano na komputerze 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

Wydaje się, że jest to jedyny sposób na zrobienie tego dla aktualnego NERDTree, nie ma też problemów z dwukrotnym kliknięciem na dirs (używając Linuksa z GVimem). – kjyv

Powiązane problemy