ভিম: বর্তমান খোলা ট্যাব ফাইলের পাথের সাথে NERDTree সিঙ্ক্রোনাইজ কিভাবে করবেন?


60

আমি যখন ভিআইএম-এর পূর্ববর্তী ফাইল থেকে আলাদা পাথ সহ একটি নতুন ট্যাব খুলি, NERDTree এখনও পূর্ববর্তী ফাইলের একই ডিরেক্টরি শ্রেণিবদ্ধ থাকবে।

বর্তমান রুট ডিরেক্টরিটি নতুন খোলা ফাইলের ডিরেক্টরিতে পরিবর্তন করতে একটি সিঙ্ক শর্টকাট আছে?

উত্তর:


15

এটি করার কোনও NERDTree- নির্দিষ্ট উপায় আছে কিনা তা আমি নিশ্চিত নই, তবে আপনি সর্বদা ভিমকে কনফিগার করতে পারেন যাতে এটি চলমান ডিরেক্টরিটি বর্তমান ফাইলের ডিরেক্টরিতে সেট করে :

autocmd BufEnter * lcd %:p:h

নতুন ট্যাবে ফাইল খোলার পরে আপনাকে যা করতে হবে তা সবই :NERDTreeToggleনতুন ট্যাবে।


116

NERDTree তে বর্তমান বাফারটি দেখতে আমি নিম্নলিখিত ম্যাপিংটি ব্যবহার করি:

 map <leader>r :NERDTreeFind<cr>

3
আমি এটি খুব দরকারী বলে মনে করি, এবং আমি আমার .ভিমির্কে গিয়েছিলাম। আমার মনে রাখা আরও সহজ করার জন্য আমি অন্য কয়েকটি বাঁধাই ব্যবহার করতে চেয়েছিলাম। এবং আমি খুঁজে পেয়েছি যে এরই মধ্যে NERDTree এর সাথে ইতিমধ্যে একটি বাধ্যতামূলক রয়েছে <Leader>f
বেনজেন

1
অসাধারণ! আমি যা খুঁজছিলাম তার উদাহরণ।
mawaldne

আপনি এই সম্পর্কে বিস্তারিত বলতে পারেন?
জেটার্ম

আপনি যদি এই আশ্চর্যজনক ভিমার্কটি ব্যবহার করেন (আমার নয়) তবে এটি ম্যাপ করা হবে, এনএফ
alpha_989

কী কী <leader>?
স্টিল্লানুব

29

মনিবের মতো শেষের দিকে% চিহ্ন দিন

:NERDTree %

আমি আমার .vimrc মধ্যে এই আছে, মানচিত্রের Ctrl+ + oবর্তমান বাফার দির nerdtree টগল করার জন্য:

map <C-o> :NERDTreeToggle %<CR>


2
তুমি জানো আমি সংশয়ী ছিলাম। আপনি যেভাবে বলেছেন সেভাবে কিছু: ডি। তবে এটি কেবলমাত্র এটিই কাজ করেছিল যা আমার এটির দরকার ছিল, ভাল করে।
হুগো

এমন বসের উত্তর!
ইকব্রোডি

1
অনেক বস, যেমন উত্তর
mhz

খালি ফাইল থেকে শুরু করার সময় একমাত্র সমস্যাটি হ'ল, বর্তমান বাফারের কোনও ডাইর নেই বলে টগল কাজ করবে না।
এক্স.আর্থার

25

আমি বিদ্যমান দুটি উত্তরই শিক্ষাগত পেয়েছি এবং সাফল্যের সাথে দুটি মিলিয়েছি যাতে আচরণটি অনেকের মতোই আইডিই থেকে প্রত্যাশা করা যায়: একটি খোলা উইন্ডো / বাফারটিতে ক্লিক করুন এবং সেই ফাইলটি এনইআরডিট্রিতে হাইলাইট করা আছে। আমি এটি আমার ~ / .vimrc এ রেখেছি:

autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif

এটি কী করে:

  1. autocmd BufEnter - প্রতিবার আপনি যখন বাফারের উপর ফোকাস করেন তখন চালায় (এনইআরডিডি উইন্ডো সহ)
  2. if &modifiable - আপনি যখন NERDTree উইন্ডোতে ক্লিক করবেন তখন আর কিছুই করবেন না (NERDTree উইন্ডোটি পরিবর্তনযোগ্য নয়)
  3. 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()

1
এর উদ্দেশ্য কী isNTFocused()? &modifiableচেকটি কি সেই মামলাটি কভার করে না?
jrdioko

2
Function name must start with a capital or "s:": rc:isNTOpen()আপনি কি স্কোপগুলি বাড়ানোর জন্য একটি প্লাগইন ব্যবহার করছেন?
ব্রায়ান হক

1
দুঃখিত তবে আমি জানি না, @ ব্রায়ান হ্যাক। আমি বর্তমানে NerdTree ব্যবহার করি না, এবং আমার পুরানোটিকে ভুল জায়গায় রেখেছি .vimrcযেখানে আমি এই কোডটি লিখেছিলাম। আমি কেন এটি ব্যবহার করেছি তা মনে নেই rc:, তবে আমি মনে করি এটি অন্যান্য ফাংশনগুলির সাথে নামের দ্বন্দ্ব এড়ানোর জন্য এটি একটি নেমস্পেসিং জিনিস ছিল। আমি যতটুকু স্মরণ করি আমি এর সাথে সম্পর্কিত কোনও প্লাগইন ব্যবহার করছিলাম না। আপনাকে দস্তাবেজগুলি অধ্যয়ন করতে হবে, বা কেবল এটি ছেড়ে দেওয়ার চেষ্টা করুন এবং কোনও কিছু ব্রেক হয়েছে কিনা তা দেখুন। তবে আমি মনে করি ফাংশনটির একটির নাম NerdTree বা অন্য কোথাও কোথাও বিরোধী ted প্রায় 5 বছরে আর কেউ জিজ্ঞাসা করেনি, তাই আমার মনে হচ্ছে এটি সাধারণ কিছু something :)
লামবার্ট

4
@ লামবার্ট আমি সমাধানযোগ্য সমস্ত সমস্যার সাথে একটি ব্যবহারযোগ্য কনফিগারেশন তৈরি করেছি: gist.github.com/avesus/1954d9384d86cc1e39cb2b2eff7017b7
ব্রায়ান হক

1
কুল। আমি বিভিন্ন বছর ধরে আমার বিভিন্ন .rc ফাইলগুলিকে গিট-ইফাই করার অর্থ করছি। কিছু দিন ...
লাম্বার্ট

2

গতকাল আমি এই প্রশ্নের জুড়ে এসেছিল, খনন কয়েক ঘন্টা পরে, আমি একটি দাখিল টানুন অনুরোধ করতে এর scrooloose nerdtree রেপো একটি উপস্থাপক NERDTreeCWDকমান্ড যে সাম্প্রতিক কাজ করা (আপডেট করার Nerd গাছ শিকড় পরিবর্তন 2012-11-12 করুন: জনসংযোগ মধ্যে মিশে গিয়ে তৈরি হয়েছে আপস্ট্রিম মাস্টার, এটি কোনও আপডেট হওয়া সংস্করণে ব্যবহারযোগ্য হবে)। এই পরিবর্তনের সাথে, এই প্রশ্নটি কেবল নিম্নলিখিত কোড দ্বারা সমাধান করা যেতে পারে।

autocmd BufEnter * silent! if bufname('%') !~# 'NERD_tree_' | cd %:p:h | NERDTreeCWD | wincmd p | endif

@ শিনজুই এবং @ ল্যাম্বার্টের NERDTreeFindপদ্ধতির সাথে তুলনা করুন , এটি প্রশ্নটি ঠিক যেমনটি জিজ্ঞাসা করেছিল ঠিক তাই করে। ব্যবহার NERDTreeFindnerdtree এবং ফলাফলের স্ক্রোল অবস্থানে পরিবর্তন হবে সব সময় নয় (যদি CWD Nerd গাছ root- র মধ্যে, এটা সহজভাবে বিস্তৃতি নোড পরিবর্তে তা পরিবর্তন) একই।

@ ইয়াসির সুলাইমানের উত্তরের সাথে তুলনা করুন, এই সমাধানটি সবসময়ই একটি NERD গাছের উইন্ডো খোলা থাকে এবং সহজে কোডিংযোগ্য হতে পারে। যদি একটি এনইআরডি ট্রি উইন্ডো ইতিমধ্যে খোলা হয়েছে, ব্যবহার করে NERDTreeToggleদু'বার গুলি চালানো দরকার (প্রথমে বিদ্যমানটি বন্ধ করুন, তারপরে এটি আবার খুলুন), দুর্ভাগ্যক্রমে, দ্বিতীয় খোলার পুরো সিডব্লিউডি প্রক্রিয়াটি এড়িয়ে যাবে।


আপনার সমাধান NERDTree সর্বদা খোলা থাকার দিকে পরিচালিত করে না? এছাড়াও আমি দেখতে পেয়েছি যে আমি যদি এমআরইউ প্লাগইন ব্যবহার করি এবং ফাইলগুলি খোলার চেষ্টা করি তবে আমি এই পরিবর্তনটি ব্যবহার করার পরে এটি এনইআরডিটি উইন্ডোতে ফাইলগুলি খুলবে। যেহেতু এটি দাঁড়িয়েছে এই পরিবর্তনটি এমআরইউ ( github.com/yegappan/mru/wiki/User- ম্যানুয়াল ) সাথে অনেকগুলি সমস্যা এবং দ্বন্দ্ব সৃষ্টি করবে , তবে কেন জানি না। অন্যান্য লোকেরাও একই ধরণের সমস্যা আছে কিনা তা পরীক্ষা করতে পারে। আমি এমনটি করি যে NERDtree ট্যাব সর্বদা খোলা থাকে ..
alpha_989

হ্যাঁ, এর ফলাফল NERDTree সর্বদা খোলা থাকে। বিষণ্ণতা।
মেরিডেথ

1

এটি এর মতো আচরণ করে :NERDTreeToggleতবে বর্তমানে এনআরডিডি ট্রিতে খোলা ফাইলটি প্রদর্শন করবে। যদি আপনি এখনও কোনও ফাইল না খোলেন (যেমন, আপনি কেবলমাত্র 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

1

আমি NERDTree ব্যবহার করে বর্তমান ডিরেক্টরি পরিবর্তন থেকে উভয় সমাধানই প্রয়োগ করি : cdNERDTree কার্যকারী ডিরেক্টরিটি বর্তমান ডিরেক্টরিতে Cসেট করতে এবং NERDTree এর মূল নোডকে বর্তমান ডিরেক্টরিতে সেট করতে ব্যবহার করুন


0

আমি মনে করি এই প্লাগইনটি আপনি যা চান https://github.com/jistr/vim-nerdtree-tabs


2
সুপার ব্যবহারকারীকে স্বাগতম! লিঙ্কটি ভাল থাকা সত্ত্বেও, এখানে কিছুটা প্রসঙ্গ অন্তর্ভুক্ত করা ভাল , এবং প্লাগইন কী করবে, কীভাবে এটি ব্যবহার করা উচিত, ইত্যাদি ব্যাখ্যা করাই ধন্যবাদ!
slhck

আসলে যা জিজ্ঞাসা করা হয়েছিল এটির জন্য এটি একটি ভাল সমাধান হতে পারে ..
alpha_989

0

আমি উত্তর পেয়েছি যে ম্যাথিয়াস একটি সমস্যা নিয়ে দুর্দান্ত উত্তর হিসাবে পোস্ট করেছে, এটি বেশ কয়েকটি প্রান্তের ক্ষেত্রে ভাল কাজ করে না। এটি নীচের পরিবর্তনের সাথে কিছুটা ভাল কাজ করে:

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.