Я нашел оба существующих ответа образовательными и успешно скомбинировал оба, так что поведение больше похоже на то, что многие ожидают от 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()