Yanıtlar:
Bunu yapmak için NERDTree'ye özgü bir yol olup olmadığından emin değilim, ancak çalışma dizinini geçerli dosyanın dizinine ayarlayacak şekilde Vim'i her zaman yapılandırabilirsiniz :
autocmd BufEnter * lcd %:p:h
Şimdi bir dosyayı yeni bir sekmede açtıktan sonra yapmanız gerekenlerin tümü :NERDTreeToggle
yeni sekmenin kendisidir.
Geçerli arabelleği NERDTree'de görüntülemek için aşağıdaki eşlemeyi kullanıyorum:
map <leader>r :NERDTreeFind<cr>
<leader>
?
Bir patron gibi bir% işareti atmak
:NERDTree %
.vimrc dosyamda bu, şu anki arabellek dizinde nerdtree geçiş yapmak için Ctrl+ oeşlenir:
map <C-o> :NERDTreeToggle %<CR>
Hem mevcut cevapları eğitici buldum hem de iki kişiyi başarılı bir şekilde birleştirdim, böylece davranış bir IDE'den bekleyeceği gibi oldu: Açık bir pencereye / arabelleğe tıklayın ve bu dosyayı NERDTree'de vurgulayın. Bunu ~ / .vimrc dosyasına koydum:
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
Bu ne yapar:
autocmd BufEnter
- Tamponun üzerine her odaklandığınızda çalışır (NERDTree penceresi dahil)if &modifiable
- NERDTree penceresini tıkladığınızda başka hiçbir şey yapmayın (NERDTree penceresi değiştirilemez)wincmd p
- NERDTreeFind, NERDTree'ye odaklanan imleci bırakır; bu, başlangıçta odaklandığınız pencereye geri dönerBu çalışmaz unutmayın herhangi değiştirilebilir değil diğer tampon - ama bu genelde iyi bir şey; aksi takdirde (örneğin) herhangi bir zamanda :help
vim'de olduğunuzda, NERDTree yardım dosyalarının bulunduğu dizini bulur ve odaklar - muhtemelen yapmak istediğiniz bir şey değildir.
Bu tek satırlık çözüm ilk başta benim için çok işe yaradı, ancak yakında NERDTree’nin bir dosyayı açtığımda etkinleştirmeme neden olduğunu gördüm - ve sonuç olarak NERDTree’nin kapatılmasını önlüyor! Tam zamanlı NERDTree kullanmak istemiyorsanız, bunun yerine .vimrc'nize koyun:
" 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()
? Does not &modifiable
onay çantayı kapsayacak?
Function name must start with a capital or "s:": rc:isNTOpen()
Bir eklenti genişletme kapsamı kullanıyor musunuz?
.vimrc
bu kodu yazdığım yerimi değiştirmedim . Neden kullandığımı hatırlamıyorum rc:
, ancak adın diğer işlevlerle çakışmasından kaçınmak için ad alanını belirleyen bir şey olduğunu düşünüyorum. Hatırladığım kadarıyla, özellikle bununla ilgili herhangi bir eklenti kullanmıyordum. Dokümanları incelemeniz veya sadece ayrılmayı denemeniz ve herhangi bir şey olup olmadığını görmek zorundasınız. Fakat fonksiyon isimlerinden birinin NerdTree'de veya başka bir yerde bir şeyle çakıştığını düşünüyorum. Neredeyse hiç kimse 5 yıl boyunca sormadı, bu yüzden basit bir şey olduğunu hissediyorum. :)
Birkaç saat kazı yaptıktan sonra dün bu soruya rastladım, NERD ağaç kökünü geçerli çalışma dizinine dönüştüren bir komutu tanıtarak bir çekişme deposunu scrooloose yapmak için bir Çekme İsteği gönderdim (Güncelleme 2012-11-12: PR ile birleştirildi) upstream master, güncellenmiş bir versiyonda kullanılabilir olmalıdır). Bu değişiklikle, bu soru basitçe aşağıdaki kod ile çözülebilir.NERDTreeCWD
autocmd BufEnter * silent! if bufname('%') !~# 'NERD_tree_' | cd %:p:h | NERDTreeCWD | wincmd p | endif
@ Shinzi's ve @ Lambart'ın NERDTreeFind
yaklaşımına kıyasla , bu tam olarak sorulan soruyu yapar. Kullanarak NERDTreeFind
nerdtree kaydırma konumunu değiştirecek ve sonuç her zaman aynı değildir (CWD NERD ağaç kökündeyse, sadece yerine değiştirmek yerine düğümü genişletir).
@Yaser Sulaiman'ın cevabını karşılaştırın, bu çözüm her zaman NERD ağaç penceresini açtı ve kolayca bağlanabilir. Bir NERD ağaç penceresi zaten açılmışsa, kullanımın NERDTreeToggle
iki kez ateşlenmesi gerekir (önce mevcut olanı kapatın, sonra tekrar açın), ne yazık ki, ikinci açılış tüm cwd işlemini atlayacaktır.
Bu gibi davranır, :NERDTreeToggle
ancak açık olan dosyayı NERDTree'de gösterir. Henüz bir dosya vim
açmadıysanız (yani, komut satırına yeni girdiniz ) NERDTree gösterir /home
.
Bunu .vimrc'nize koyun:
" 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 kullanarak geçerli dizini değiştir'den iki çözümü de kullanıyorum : cd
NERDTree çalışma dizinini geçerli dizine C
ayarlamak ve NERDTree kök düğümünü geçerli dizine ayarlamak için kullanın
Sanırım bu eklenti istediğin şey https://github.com/jistr/vim-nerdtree-tabs
Matthias'ın bir sorunla harika bir cevap olarak gönderdiği cevabı buldum, birkaç önemli durumda iyi sonuç vermedi. Aşağıdaki değişiklikle biraz daha iyi çalışır:
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