답변:
NERDTree 고유의 방법이 있는지 확실하지 않지만 작업 디렉토리를 현재 파일의 디렉토리로 설정하도록 Vim을 항상 구성 할 수 있습니다 .
autocmd BufEnter * lcd %:p:h
이제 새 탭에서 파일을 연 후 수행해야 할 모든 작업 :NERDTreeToggle
이 새 탭 자체에 있습니다.
다음 매핑을 사용하여 NERDTree에서 현재 버퍼를 봅니다.
map <leader>r :NERDTreeFind<cr>
<leader>
?
보스처럼 끝에 % 표시를 던지다
:NERDTree %
나는 내 .vimrc에 이것을 가지고 있으며, 현재 버퍼의 디렉토리에서 nerdtree를 토글하기 위해 Ctrl+ o를 매핑한다 :
map <C-o> :NERDTreeToggle %<CR>
나는 기존의 답변이 교육적이라는 것을 발견 하고이 두 가지를 성공적으로 결합하여 많은 사람들이 IDE에서 기대하는 것과 비슷합니다. 열린 창 / 버퍼를 클릭하고 해당 파일을 NERDTree에서 강조 표시하십시오. 나는 이것을 ~ / .vimrc에 넣었다.
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
이것이하는 일 :
autocmd BufEnter
-버퍼에 집중할 때마다 실행됩니다 (NERDTree 창 포함).if &modifiable
-NERDTree 창을 클릭하면 다른 작업을 수행하지 않습니다 (NERDTree 창을 수정할 수 없음)wincmd p
-NERDTreeFind는 커서를 NERDTree에 초점을 둡니다. 원래 초점을 둔 창으로 돌아갑니다.이 작동하지 않습니다 어떤 수정할 수없는 다른 버퍼 -하지만 일반적으로 좋은 일; 그렇지 않으면 (예를 들어) :help
vim에 들어갈 때마다 NERDTree는 도움말 파일이 저장된 디렉토리를 찾아 초점을 맞 춥니 다.
그 한 줄 솔루션은 처음에는 나에게 도움이되었지만 파일을 열 때마다 NERDTree가 활성화되어 결과적으로 NERDTree가 닫히는 것을 방지합니다! NERDTree를 풀 타임으로 사용하지 않으려면 대신 .vimrc에 넣으십시오.
" 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()
isNTFocused()
무엇입니까? 하지 않습니다 &modifiable
검사는이 경우를 포함?
Function name must start with a capital or "s:": rc:isNTOpen()
플러그인 확장 범위를 사용하고 있습니까?
.vimrc
해당 코드를 작성한 오래된 것을 잘못 배치했습니다 . 나는 왜을 사용했는지 기억하지 rc:
못하지만 다른 기능과의 이름 충돌을 피하는 것은 이름이 큰 것이라고 생각합니다. 내가 기억하는 한, 특별히 관련 플러그인을 사용하지 않았습니다. 문서를 연구하거나 문서를 남겨두고 문제가 있는지 확인해야합니다. 그러나 함수 이름 중 하나가 NerdTree 또는 다른 곳에서 무언가와 충돌했다고 생각합니다. 거의 5 년 동안 아무도 묻지 않았기 때문에 단순한 느낌이 듭니다. :)
어제 몇 시간 동안 파고 든 후이 질문 을 보았을NERDTreeCWD
때, NERD 트리 루트를 현재 작업 디렉토리로 변경 하는 명령을 소개하는 scrooloose의 nerdtree repo에 Pull Request 를 제출 했습니다 (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 처리를 건너 뜁니다.
이것은 :NERDTreeToggle
NERDTree에서 현재 열린 파일 처럼 작동 하지만 표시됩니다. 파일을 아직 열지 않은 경우 (즉, vim
명령 줄에 방금 입력 한 경우) NERDTree가 표시 /home
됩니다.
이것을 .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
Matthias가 한 가지 문제에 대한 훌륭한 답변이라고 게시 한 답변을 발견했지만 두 가지 경우에는 잘 작동하지 않습니다. 아래 변경으로 조금 더 잘 작동합니다.
function! NERDTreeToggleInCurDir()
" If NERDTree is open in the current buffer
if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
exe ":NERDTreeClose"
elseif bufname('%')
exe ":NERDTreeFind"
else
exe ":NERDTreeCWD"
endif
endfunction
<Leader>f