जवाबों:
मुझे यकीन नहीं है कि ऐसा करने के लिए एक NERDTree- विशिष्ट तरीका है, लेकिन आप हमेशा विम को कॉन्फ़िगर कर सकते हैं ताकि यह वर्तमान फ़ाइल की निर्देशिका में कार्यशील निर्देशिका को सेट कर दे :
autocmd BufEnter * lcd %:p:h
अब एक नए टैब में फ़ाइल खोलने के बाद आपको जो कुछ करना है :NERDTreeToggle
, वह सभी नए टैब में ही है।
NERDTree में वर्तमान बफर देखने के लिए मैं निम्नलिखित मैपिंग का उपयोग करता हूं:
map <leader>r :NERDTreeFind<cr>
<leader>
?
एक बॉस की तरह अंत में एक% चिह्न फेंक दें
:NERDTree %
मेरे पास यह मेरे .vimrc में है, यह वर्तमान बफर की डायर में nddtree को मैप करने के लिए Ctrl+ o:
map <C-o> :NERDTreeToggle %<CR>
मैंने दोनों मौजूदा उत्तरों को शैक्षिक पाया, और दोनों को सफलतापूर्वक संयोजित किया ताकि व्यवहार अधिक हो जैसे कि एक आईडीई से बहुत से लोग अपेक्षा करेंगे: एक खुली खिड़की / बफर पर क्लिक करें, और उस फ़ाइल को NERDTree में हाइलाइट किया गया है। मैंने इसे अपने ~ / .vimrc में डाला:
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
यह क्या करता है:
autocmd BufEnter
- हर बार जब आप एक बफर पर ध्यान केंद्रित करते हैं (NERDTree विंडो सहित)if &modifiable
- जब आप NERDTree विंडो पर क्लिक करते हैं, तो कुछ और न करें (NERDTree विंडो मॉडिफाइबल नहीं है)wincmd p
- NERDTreeFind NERDTree पर केंद्रित कर्सर को छोड़ देता है; यह उस विंडो पर वापस स्विच हो जाता है जिस पर आप मूल रूप से ध्यान केंद्रित करते हैंध्यान दें कि यह किसी भी अन्य बफर पर काम नहीं करेगा जो कि परिवर्तनीय नहीं है - लेकिन यह आम तौर पर एक अच्छी बात है; अन्यथा (उदाहरण के लिए) किसी भी समय जो आपको मिला :help
, 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()
क्या आप एक प्लगइन का उपयोग कर रहे हैं scopes का विस्तार?
.vimrc
है जिसमें मैंने वह कोड लिखा था। मुझे याद नहीं है कि मैंने इसका उपयोग क्यों किया rc:
, लेकिन मुझे लगता है कि अन्य कार्यों के साथ नाम के टकराव से बचने के लिए यह एक नाम बदलने वाली बात थी। मैं विशेष रूप से संबंधित किसी भी प्लगइन का उपयोग नहीं कर रहा था, जहाँ तक मुझे याद है। आपको डॉक्स का अध्ययन करना होगा, या बस इसे छोड़ने की कोशिश करें और देखें कि क्या कुछ टूटता है। लेकिन मुझे लगता है कि नर्डड्री या अन्य जगहों में किसी एक के नाम से एक फंक्शन का विरोध हुआ। लगभग 5 वर्षों में किसी और ने नहीं पूछा, इसलिए मुझे लगता है कि यह कुछ सरल है। :)
मैं कल इस सवाल पर आया था, खुदाई के कुछ घंटों के बाद, मैंने स्क्रोलोलोज के नर्डट्री रेपो को एक आदेश पेश करने के लिए एक पुल अनुरोध को प्रस्तुत किया, जो एनईआरडी केNERDTreeCWD
पेड़ की जड़ को वर्तमान कार्य निर्देशिका में बदल देता है (अद्यतन 2012-11-12 पर अपडेट किया गया है) अपस्ट्रीम मास्टर, यह एक अद्यतन संस्करण पर प्रयोग करने योग्य होना चाहिए)। इस परिवर्तन के साथ, इस प्रश्न को केवल निम्नलिखित कोड द्वारा हल किया जा सकता है।
autocmd BufEnter * silent! if bufname('%') !~# 'NERD_tree_' | cd %:p:h | NERDTreeCWD | wincmd p | endif
@ Shinzui और @ लैम्बार्ट के NERDTreeFind
दृष्टिकोण की तुलना करें , यह वही करता है जो सवाल पूछा गया था। उपयोग NERDTreeFind
करने से nddtree की स्क्रॉल स्थिति बदल जाएगी और परिणाम हमेशा समान नहीं होते हैं (यदि CWD NERD ट्री रूट में है, तो यह केवल नोड को इसमें बदलने के बजाय फैलता है)।
@Yaser सुलेमान के जवाब से तुलना करें, इस समाधान में एक 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 चाहते हैं
मुझे जवाब मिला कि मथायस ने एक समस्या के साथ एक शानदार जवाब दिया है, यह कुछ मामलों में अच्छी तरह से काम नहीं करता है। नीचे दिए गए परिवर्तन के साथ यह थोड़ा बेहतर काम करता है:
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