Eu encontrei as duas respostas educacionais existentes e combinei as duas com sucesso, para que o comportamento seja mais como muitas pessoas esperariam de um IDE: Clique em uma janela / buffer aberto e tenha esse arquivo destacado no NERDTree. Eu coloquei isso no meu ~ / .vimrc:
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
O que isso faz:
-
autocmd BufEnter
- é executado toda vez que você se concentra em um buffer (incluindo a janela NERDTree)
-
if &modifiable
- quando você clica na janela NERDTree, não faz mais nada (a janela NERDTree não é modificável)
-
wincmd p
- NERDTreeFind deixa o cursor focado no NERDTree; isso muda para a janela que você focou originalmente em
Note que isto não funcionará em qualquer outro buffer que não seja modificável - mas isso geralmente é uma coisa boa; de outra forma (por exemplo) sempre que você obtivesse :help
no vim, o NERDTree encontraria e focaria o diretório onde os arquivos de ajuda estão armazenados - provavelmente não é algo que você queira fazer.
Essa solução de uma linha funcionou muito bem para mim no início, mas logo descobri que isso faz com que o NERDTree seja ativado sempre que abro um arquivo - e, como resultado, ele impede que o NERDTree seja fechado! Se você não quiser usar o NERDTree em tempo integral, coloque isso no seu .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()