переназначить NERDTree двойным щелчком на «T»

Использование плагина VIM NERDTree.

Есть ли способ переназначить действие «Двойной щелчок по файлу», чтобы файл автоматически открывался на новой вкладке (T)?


person evolution    schedule 20.05.2012    source источник
comment
Shift+t для любого файла в NERDTree. О, извините, просто перечитайте вопрос. Вам требовалось сопоставление, а не просто тихое открытие файла. Пытающийся   -  person kiddorails    schedule 20.05.2012
comment
Вам, вероятно, потребуется отредактировать код NERDTree, самим собой.   -  person romainl    schedule 20.05.2012


Ответы (2)


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.

person jens-na    schedule 12.11.2012

Хотя моя версия NERDtree также указана как 4.2.0 (git cloned 22 июля 2015 г.), похоже, что в то же время был проведен серьезный рефакторинг, поэтому решение 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" })
person Ramin    schedule 22.07.2015
comment
Кажется, это единственный способ сделать это для текущего NERDTree, также нет проблем с двойным щелчком по каталогам (используя Linux с GVim). - person kjyv; 12.02.2016