Я использую следующее отображение для просмотра текущего буфера в NERDTree:
map <leader>r :NERDTreeFind<cr>
Когда я открываю новую вкладку с путем, отличным от предыдущего файла в VIM, NERDTree по-прежнему остается той же иерархии каталогов предыдущего файла.
Существует ли ярлык синхронизации для изменения текущего корневого каталога на каталог нового открытого файла?
Я использую следующее отображение для просмотра текущего буфера в NERDTree:
map <leader>r :NERDTreeFind<cr>
I found both the existing answers educational, and successfully combined the two so that the behavior is more like many people would expect from an IDE: Click on an open window/buffer, and have that file highlighted in the NERDTree. I put this in my ~/.vimrc:
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
What this does:
autocmd BufEnter
- runs every time you focus on a buffer (including the NERDTree window)if &modifiable
- when you do click the NERDTree window, do nothing else (the NERDTree window is not modifiable)wincmd p
- NERDTreeFind leaves the cursor focused on the NERDTree; this switches back to the window you'd originally focused onNote that this won't work on any other buffer that isn't modifiable -- but that's generally a good thing; otherwise (for example) any time you got :help
in vim, NERDTree would find and focus the directory where help files are stored--probably not something you want it to do.
That one-line solution worked great for me at first, but I soon found that it causes NERDTree to activate any time I opened a file--and as a result, it prevents NERDTree from ever being closed! If you don't want to use NERDTree full-time, put this in your .vimrc instead:
" returns true iff is NERDTree open/active function! rc:isNTOpen() return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1) endfunction " calls NERDTreeFind iff NERDTree is active, current window contains a modifiable file, and we're not in vimdiff function! rc:syncTree() if &modifiable && rc:isNTOpen() && strlen(expand('%')) > 0 && !&diff NERDTreeFind wincmd p endif endfunction autocmd BufEnter * call rc:syncTree()
бросить знак% на конце, как босс
:NERDTree %
У меня есть это в моем .vimrc, он отображает Ctrl+ oдля переключения nerdtree в директории текущего буфера:
map <C-o> :NERDTreeToggle %<CR>
Я не уверен, есть ли способ сделать это для NERDTree, но вы всегда можете настроить Vim так, чтобы он установил рабочий каталог в каталог текущего файла :
autocmd BufEnter * lcd %:p:h
Теперь все, что вам нужно сделать после открытия файла в новой вкладке, - :NERDTreeToggle
в самой новой вкладке.
Я столкнулся с этим вопросом вчера, после нескольких часов копания, я отправил Pull Request в репозиторий scrooloose nerdtree, вводя NERDTreeCWD
команду, которая меняет корень дерева NERD на текущий рабочий каталог (Обновление 2012-11-12: PR был объединен в ведущий мастер, он должен использоваться в обновленной версии). С этим изменением этот вопрос может быть просто решен с помощью следующего кода.
autocmd BufEnter * silent! if bufname('%') !~# 'NERD_tree_' | cd %:p:h | NERDTreeCWD | wincmd p | endif
Сравните с подходами @ shinzui и @ Lambart NERDTreeFind
, это именно то, что задал вопрос. Использование NERDTreeFind
изменит положение прокрутки у дерева ботаников, и результат не всегда будет одинаковым (если CWD находится в корне дерева NERD, он просто расширяет узел, вместо этого превращаясь в него).
По сравнению с ответом @Yaser Sulaiman, это решение всегда имеет открытое окно дерева NERD и может легко кодироваться. Если окно дерева NERD уже было открыто, NERDTreeToggle
его нужно будет запустить дважды (сначала закройте существующее, затем откройте его снова), к сожалению, второе открытие пропустит всю обработку cwd.
This behaves like :NERDTreeToggle
but will show the currently opened file in NERDTree. If you haven't opened a file yet (i.e., you just entered vim
in your commandline) NERDTree shows /home
.
Put this in your .vimrc:
" Open NERDTree in the directory of the current file (or /home if no file is open) nmap <silent> <C-i> :call NERDTreeToggleInCurDir()<cr> function! NERDTreeToggleInCurDir() " If NERDTree is open in the current buffer if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1) exe ":NERDTreeClose" else exe ":NERDTreeFind" endif endfunction
Я применяю оба решения из Изменить текущий каталог с помощью NERDTree : используйте cd
для установки рабочего каталога NERDTree в текущий каталог и C
для установки корневого узла NERDTree в текущий каталог
Я думаю, что этот плагин то, что вы хотите https://github.com/jistr/vim-nerdtree-tabs