কিভাবে একটি ট্যাবে বাফারগুলির একটি সেট বাঁধবেন?


14

আমার যখন একই সময়ে বিভিন্ন প্রকল্পে কাজ করার দরকার হয় তখন আমার ফ্লোয়িং ওয়ার্কফ্লো থাকে:

  • আমি প্রতিটি প্রকল্পের জন্য একটি ট্যাব তৈরি।
  • প্রতিটি ট্যাবে আমি যে ফাইলগুলি সম্পাদনা করতে চাই তা খুলি, যা বেশ কয়েকটি বাফার করে।
  • অপশনালি যদি আমার একই সাথে দুটি (বা আরও বেশি) ফাইল দেখতে হয় তবে আমি বিভক্ত উইন্ডো তৈরি করি যাতে আমার কাছে একটি ট্যাব থাকে যা বিভিন্ন উইন্ডোতে থাকে যা একটি বাফার দেখায়।

আমার বাফারগুলির মধ্যে নেভিগেট করতে আমি সত্যিই ব্যবহার করি না :lsএবং এর :b [name or number of buffer]পরিবর্তে আমি কিছু সুবিধাজনক ম্যাপিং তৈরি করেছি যা আমাকে :bnextএবং এর সাথে বাফারগুলির মধ্যে স্যুইচ করতে দেয়:bprevious

কাজের এই উপায়টি বেশ ভাল তবে কিছু আমাকে বিরক্ত করে: বাফারগুলি ট্যাবগুলির মধ্যে ভাগ করা হয়।

যদি আমি খোলি file1এবং file2ভিতরে tab1এবং file3ভিতরে tab2, যদি tab1আমি বেশ কয়েকবার ব্যবহার করি তবে আমি এই ট্যাবটি :bnextদেখতে পাব file3যা আমি চাই না। আমি যে ওয়ার্কফ্লোটি পেতে চাই তা হ'ল :

  • ভিম শুরু করুন (এতে একটি বাফার সহ আমার প্রথম ট্যাব রয়েছে): $ vim foo
  • এই ট্যাবে একটি বাফার যুক্ত করুন: :e bar
  • একটি নতুন ট্যাব খুলুন এবং এতে স্যুইচ করুন: :tabnew
  • এই ট্যাবে একটি নতুন বাফার খুলুন: :e baz
  • যদি আমি এই বাফারে থাকি এবং করি :bnextবা :bpreviousআমি বাফারে থাকি baz(যেহেতু এটি এই ট্যাবটিতে একমাত্র)
  • যদি আমি পূর্বের ট্যাবটিতে যাই এবং :tabpreviousবেশ কয়েকবার সম্পাদন করি তবে :bnextআমি কেবল fooএবং barবাফারগুলির মধ্যেই স্যুইচ করব তবে দেখতে পাব নাbaz

সুতরাং এখানে আমার প্রশ্নটি আসে: একটি টাবের সাথে বাফারগুলির একটি সেট বেঁধে রাখা এবং ভিএম-কে অন্য ট্যাব থেকে কিছু বোফার অ্যাক্সেসের অনুমতি দেওয়া উচিত নয় যা তার মধ্যে রয়েছে?

দ্রষ্টব্য: আমি সচেতন যে :b [myBuffer]একটি ট্যাবে একটি বাফার রাখার উপায় হতে পারে তবে সম্পাদনা করার জন্য আমার কাছে 3 বা 4 ফাইল থাকলে আমার মনে হয় আমি বাফারের নামটি টাইপ করার চেয়ে ম্যাপিংগুলি আরও দ্রুত ব্যবহার করছি (এমনকি যদি আমি পারি তবে বাফরের নামের সাথে মেলে কয়েকটি অক্ষর টাইপ করুন)


1
এখানে এমন একটি পুরানো আলোচনা যা এই জাতীয় পদ্ধতির প্রো ও কনসকে হাইলাইট করেছে এবং এর পরিবর্তে এমন কিছু প্রস্তাব দেওয়ার জন্য যা আজ অনুবাদ করা যেতে পারে: একাধিক ভিম দৃষ্টান্ত (প্রতি প্রকল্প / বাফার তালিকায় একটি) + tmux: vim.1045645.n5.nabble.com/…
ভ্যানল্যাসার

@ ভ্যানলাসার: লিঙ্কটির জন্য ধন্যবাদ এটি একটি আকর্ষণীয় আলোচনা! আমি যখন আমার ব্যক্তিগত মেশিনে থাকি তখন আমি প্রকৃতপক্ষে tmux এবং বিভিন্ন ভিআইএম উদাহরণ অন্তর্ভুক্ত করি। আমার প্রশ্নটি এ থেকে আসে যে আমার পেশাগত কাজের জন্য আমাকে উইন্ডোজ ব্যবহার করতে হবে এবং উইন্ডোগুলি কীভাবে পরিচালনা করা হয় তা আমি সত্যিই পছন্দ করি না: alt+tabভিএম-এর মধ্যে ট্যাব স্যুইচ করার চেয়ে (বা আরও খারাপ মাউস) ব্যবহার করা খুব কম সহজ অনুভব করে।
স্ট্যাটক্স

1
হতে পারে ভিআইএম-সিটিএলস্পেস সাহায্য করতে পারে - এটি প্রতি ট্যাবপেজ বাফার তালিকার জন্য বিজ্ঞাপন দেয়; যদিও আমি এটি ব্যবহার করি না।
ভ্যানল্যাসার

উত্তর:


7

Mhh, আমি সেখানে কোনও প্লাগইন খুঁজে পাইনি, তবে আপনি নিজেরাই এটি লিখতে পারেন। এর জন্য আপনাকে উইমস্ক্রিপ্ট শিখতে হবে। আমি কেবলমাত্র কার্যকারিতাটি কার্যকর করেছি যা আপনি কোনও ট্যাবে বাফারগুলির মধ্যে স্যুইচ করতে পারেন (এখনও কোনও মোছা নেই)। আপনি এটি আপনার ভিএমআরসি-তে অনুলিপি করতে পারেন:

if !exists("g:WindowBufManager") 
  let g:WindowBufManager= {}
endif

function! StoreBufTab()
  if !has_key(g:WindowBufManager, tabpagenr())
    let  g:WindowBufManager[tabpagenr()] = []
  endif

  " add the new buffer to our explorer
  if index(g:WindowBufManager[tabpagenr()], bufname("%")) == -1 && bufname("%") != ""
    call add (g:WindowBufManager[tabpagenr()],bufname("%"))
  endif
endfunction

function! WindowBufManagerNext() 
  " find the next index of the buffer
  let s = index(g:WindowBufManager[tabpagenr()], bufname("%"))
  if (s!= -1)
    let s = (s +1) % len(g:WindowBufManager[tabpagenr()])
    execute 'b ' . g:WindowBufManager[tabpagenr()][s]
  endif
endfunction

augroup WindowBufManagerGroup
  autocmd! BufEnter * call StoreBufTab()
augroup END

আপনার ভিএমআরসি বন্ধ করুন এবং এটি আবার খুলুন। পরবর্তী বাফারটি সন্ধান করতে কেবল ব্যবহার করুন

:call WindowBufManagerNext()

অথবা আপনার নিজস্ব কমান্ড বা ম্যাপিং সংজ্ঞা দিন। এটি ততক্ষণ কাজ করবে যতক্ষণ আপনি কোনও ট্যাব বা বাফারটি বন্ধ বা মুছবেন না। এটি একাধিক বাফারগুলির জন্যও কাজ করবে না। এই বৈশিষ্ট্যগুলি যুক্ত করতে এটি আরও কিছু কাজ প্রয়োজন, তবে এটি অবশ্যই কার্যকর।


আমি একটি প্লাগইনও পাইনি এবং আমি একটি বিল্ট-ইন বৈশিষ্ট্যটি এটি করার জন্য আশা করছিলাম তবে মনে হচ্ছে আপনি ঠিক বলেছেন আমার সম্ভবত এটি নিজেই করতে হবে। আপনার কোডটির জন্য ধন্যবাদ আমি এটি ব্যবহার করতে পারি এটির একটি পূর্ণ প্লাগইন বিকাশের বেস রয়েছে।
স্ট্যাটক্স

6

বাফারগুলি বিশ্বব্যাপী এবং ট্যাব পৃষ্ঠাগুলি, উইন্ডো এবং বাফারগুলির উপরে নিজের বিমূর্ত স্তরটি লেখার ব্যতীত আপনি এগুলি করতে কিছুই করতে পারেন না। ফিলোলো 1 এর উত্তরটি সমস্যার একটি যুক্তিসঙ্গত দৃষ্টিভঙ্গি দেখায় তবে আপনি দ্রুত "সমাধান" এর সীমাটি সন্ধান করতে পারেন এবং অনেকগুলি বিল্ট-ইন বৈশিষ্ট্যগুলির মতো :bufdoবা বিকল্প ফাইলটির নকল করতে হবে ...

অন্যদিকে "তর্কগুলি" একটি উইন্ডোতে স্থানীয় হতে পারে তাই এগুলি "বাফারস" (শব্দের সংক্ষিপ্ত অর্থের তুলনায়) এর চেয়ে আপনার কার্যপ্রবাহে আরও কার্যকর হতে পারে:

$ vim file1 file2
:tabnew
:argl file3 file4 file5
:n
:n
gt
:n
gt
:N
and so on…

যুক্তিগুলি বাফারের মতো নমনীয় নয় তবে তারা আপনার কর্মপ্রবাহের জন্য আরও নির্ভরযোগ্য ভিত্তি সরবরাহ করতে পারে।

তবে প্রতিটি প্রকল্পের নিজস্ব ভিমের উদাহরণে কাজ করা আমার মতে একমাত্র ব্যবহারিক সমাধান।


আমি এই ধারণার সাথে একমত যে পৃথক ভিআইএম দৃষ্টান্ত ব্যবহার করা ভাল যখন আমি এটি টার্মিনালে ব্যবহার করতে পারি, কারণ আমি অন্য মন্তব্যে বলেছিলাম যে আমাকে আমার পেশাদার কম্পিউটারে উইন্ডোজ ব্যবহার করতে হবে এবং জিভিআইএম উদাহরণগুলির মধ্যে স্যুইচ করা এই ওএসের সাথে বাটের ব্যথা । আমি এই যুক্তিগুলির আগে একবার ব্যবহার করিনি এবং এটি একটি ভাল কাজ হতে পারে ধন্যবাদ, ধন্যবাদ!
স্ট্যাটক্স

2

সুতরাং, কিছুটা বিলম্বের সাথে, আমি মনে করি আমি একটি সন্তোষজনক (অন্তত আমার জন্য!) উত্তর পেয়েছি। আপনার শোগোর দুটি প্লাগইন লাগবে:

এবং বর্তমান ট্যাব :lsথেকে কেবল বাফারগুলি দেখতে (এবং নির্বাচন করতে) পরিবর্তে ব্যবহার করার জন্য একটি দ্রুত অ্যাক্সেস মানচিত্র ।

উদাহরণস্বরূপ, এর মতো কিছু:

nnoremap <leader>b :<C-u>Unite buffer_tab -no-split<CR>

একত্রিত - প্রতি ট্যাব বাফার

আপনি এখনকার ট্যাব বাফার তালিকার মধ্য দিয়ে যেতে পারেন ( j, k) একটি নির্বাচন করুন ( CR), বাতিল ( q), কিছু অক্ষর টাইপ করে বাফার নির্বাচনটি দ্রুত ফিল্টার করতে "ইনপুট" (সন্নিবেশ) মোড প্রবেশ করুন, বা এমনকি Tabক্রিয়া তালিকা খুলতে আঘাত করতে পারেন বর্তমান নির্বাচিত আইটেমটির জন্য (যেমন বর্তমান সক্রিয়টির উপরে বাফারটি খুলতে ) - সংক্ষেপে, আপনি জেনেরিক "iteক্যবদ্ধ" উপায়ে কাজ করেন।

(এছাড়াও দেখুন এবং :h unite_default_key_mappingsসাধারণভাবে Unক্যবদ্ধ সহায়তা)।


এবং এখন চূড়ান্ত (এখনও .চ্ছিক) কৌশল। অল্টার সিএমডি দিয়ে আপনি নিজের তৈরি, ট্যাব-বুদ্ধিমান সক্ষম, lsআদেশ (উপরের canক্যবদ্ধ কার্যকারিতার উপর ভিত্তি করে) তৈরি করতে পারেন:

:command! LS Unite buffer_tab -no-split
:AlterCommand ls LS

... এবং যতবার আপনি আঘাত করবেন :ls, তার পরিবর্তে ভিম আপনার কমান্ডটি চালাবে ।

মনে রাখবেন যে আপনারও প্রয়োজন হবে না :bnবা :bp, যেহেতু ট্যাবের বাফারগুলি দেখা এবং নির্বাচন এখন একই কমান্ড।


আমিও এই সমাধানটি চেষ্টা করব। এই মুহুর্তের জন্য আমি মন্তব্যে ভ্যানলেসার দ্বারা উল্লিখিত সিটিআরএল-স্পেস দেওয়ার চেষ্টা করছি, যা বেশ ভাল। আমি দেখতে পাচ্ছি কোন সমাধানটি সবচেয়ে সুবিধাজনক। এছাড়াও +1 প্লাস্টিকের প্লাস্টিকের জন্য যা দুর্দান্ত is
স্ট্যাটক্স

2

আমি মন্তব্য করতে পারছি না কারণ আমার অ্যাকাউন্টটি নতুন তাই সম্পর্কে দুঃখিত, তবে সিটিআরএল-স্পেসের জন্য ++++ 1।

সহায়তার মধ্য দিয়ে আমি যখন অর্ধেক করেছিলাম তখনই আমি বিক্রি হয়ে গিয়েছিলাম। Ctrlspace এর মতো একটি কাঠামো রয়েছে:

workspaces --> contain tabs --> contain buffers

সুতরাং, আপনি যে প্রকল্পে কাজ করছেন তার জন্য একটি ওয়ার্কস্পেস সংরক্ষণ করতে পারেন এবং তারপরে আপনি যখনই চান ততক্ষণে এটি লোড করতে পারেন। এর অর্থ হ'ল যে কোনও সময় আপনি ভিম বন্ধ করলে আপনি আপনার বাফার এবং ট্যাব বিভক্ত সমস্ত সংরক্ষণ করতে পারবেন।

আপনি নিজের ট্যাবগুলির নামও রাখতে পারেন। যদি এটি পর্যাপ্ত না হয় তবে আপনি খুব সহজেই কার্যকরী ডিরেক্টরিগুলি পরিবর্তন করতে পারেন এবং আপনি যে ডিরেক্টরিগুলি ঘন ঘন ব্যবহার করেন সেগুলির জন্য বুকমার্ক তৈরি করতে পারেন।

এটি নারডট্রি দিয়ে সুন্দরভাবে ইন্টারফেস করে যদি আপনি এটি ব্যবহার করেন (যদিও সত্যি বলতে আপনি সম্ভবত সিটিআর স্পেসের সাথে এক সপ্তাহ পরে আপনার প্রয়োজনের মতো বোধ করবেন না)


এই ব্যবহারের ক্ষেত্রে বিবেচনা করুন:

আপনার একটি প্রকল্প আছে এর মধ্যে গাছ লাগানো জড়িত। রয়েছে ফলের গাছ এবং অর্থ গাছ। মানি গাছগুলিতে ডলার এবং সেন্ট থাকে তবে ফলের গাছে আপেল এবং কমলা থাকে।

এই উদাহরণে আপেল, কমলা, ডলার এবং সেন্ট সমস্ত "বাফার"।

Ctrlspace আপনাকে একটি "ট্যাব" তে আপেল এবং কমলা আলাদা করতে দেয় যা আপনি "ফল" হিসাবে লেবেল করতে পারেন - এই লেবেলটি আপনার উইন্ডোর শীর্ষে ট্যাগ লাইনে উপস্থিত হবে। তেমনি, ডলার এবং সেন্টগুলি একটি "অর্থ" ট্যাবে যায়।

"ট্রি" কর্মক্ষেত্রটি পুরো কনফিগারেশনটি সংরক্ষণ করে এবং আপনি যখনই ভিএম খুলবেন ততক্ষণে আপনাকে এটিকে অ্যাক্সেস করতে দেয়।


এখন আমি এর অস্তিত্ব সম্পর্কে সচেতন, এই প্লাগইনটি না করে আমি সত্যিই ভিএম তে অবজেক্ট ওরিয়েন্টেড ডেভলপমেন্ট করার কল্পনা করতে পারি না। সেক্ষেত্রে লিঙ্কটি এখানে: https://github.com/szw/vim-ctrlspace


2

সুতরাং অবশেষে আমার সমস্যা সমাধানের জন্য আমার নিজের প্লাগইন তৈরি করার সিদ্ধান্ত নিয়েছে, এটি গিথুবে উপলভ্য ।

আমি @ ফিলোলো 1 এর ধারণাটি ব্যবহার করেছি এবং এটি সম্পূর্ণ করার চেষ্টা করেছি, আমি যখন এই উত্তরটি লিখছি তখনও এটি এখনও কাজ চলছে work

সম্পাদনা করুন আমি আমার ওয়ার্কফ্লো হিসাবে বিবর্তিত হিসাবে প্লাগইনটি আর রক্ষণ করি না এবং আমি বুঝতে পারি যে কোনও ট্যাবে বাঁধাই বাফারগুলি সমাধান হওয়ার চেয়ে আরও বেশি সমস্যা যুক্ত করে।


প্লাগইনটি বাফারগুলিকে ট্যাবগুলিতে আবদ্ধ করে: ব্যবহারকারী যখন বাফারটি খুলেন, এটি স্বয়ংক্রিয়ভাবে ট্যাবে "সঞ্চিত" থাকে এবং অন্য ট্যাব থেকে অ্যাক্সেস করা যায় না।

ইনস্টলেশনটি "প্লাগইন ম্যানেজার বান্ধব" হওয়া উচিত (কমপক্ষে এটি ভিম-প্লাগ এবং ভান্ডেলের সাথে ভাল কাজ করে )

প্রধান বৈশিষ্ট্যগুলির কয়েকটি হ'ল:

  • বাফারগুলির বাইন্ডিংটি স্বয়ংক্রিয়ভাবে পরিচালনা করুন (ব্যবহারকারী সেটির আগে সেগুলি খুলতে পারে)
  • :NextBufএবং :PrevBufপ্রতিস্থাপন :bnএবং :bNট্যাবগুলির একটি সামঞ্জস্যপূর্ণ স্থিতি রাখতে
  • :ListBufবাফারগুলিকে একইভাবে তালিকার জন্য মঞ্জুরি দেয় :lsযে তারা ট্যাবগুলিতে পৃথক হয়েছে এবং একটি চিহ্ন এটি ব্যবহারকারীকে বর্তমানে দেখতে পাবে যে তিনি বর্তমানে কোন ট্যাবে আছেন।
  • :ChangeBuf বাফারের পরিবর্তন এবং স্বয়ংক্রিয়ভাবে ট্যাব পরিবর্তন করতে একটি বাফার নম্বর বা একটি বাফারের নাম গ্রহণ করুন
  • একটি বাফার বন্ধ করে দেওয়া হয় :CloseBuf
  • একটি ট্যাব বন্ধ করে কাজ সম্পন্ন হয় :CloseTab

অন্যান্য অপারেশন জন্য ব্যবহারকারী ব্যবহার করতে সক্ষম হওয়া উচিত বিল্ট-ইন বৈশিষ্ট্য (যেমন :tabopen, :tabnext, ইত্যাদি ...)

প্রতিটি কমান্ডের জন্য কিছু ডিফল্ট ম্যাপিং সরবরাহ করা হয় এবং এগুলি let g:betterTabsVim_map_keys = 0আপনার যুক্ত করে সহজেই অক্ষম করা যায় .vimrc

আমি একটি স্পষ্ট সহায়তা ফাইল ( :h betterTabs.txt) তৈরি করার চেষ্টাও করেছি : এটি এখনও সম্পূর্ণ হয়নি তবে ব্যবহারকারীদের প্লাগইনটি ব্যবহার করার জন্য সর্বনিম্ন সন্ধান করা উচিত।

প্লাগইনটি কোনও নেটিভ আচরণকে গোলমেলে না তা নিশ্চিত করার জন্য আমার এখনও অনেক পরীক্ষা করার দরকার আছে।

শেষ পর্যন্ত যদি কেউ এটির সহায়তা করতে চায় তবে গিথুব পৃষ্ঠায় সমস্যা তৈরি করা বা টানার অনুরোধ তৈরি করা সর্বদা সম্ভব ।


1

এই প্লাগইনটি দেখুন। এটি আমার কাছে মনে হয় এটি আপনার প্রয়োজনের জন্য উপযুক্ত। https://github.com/szw/vim-ctrlspace


প্রকৃতপক্ষে ভ্যানলাসার মন্তব্যগুলিতে এটি উল্লেখ করেছেন এবং আমি এটি প্রথমে যথেষ্ট ঘনিষ্ঠভাবে দেখিনি তবে এটি সত্যিই ভাল বলে মনে হচ্ছে, আমি এটি কয়েক দিন ধরে চেষ্টা করছি।
স্টাটক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.