ডুপ্লিকেট বাফারটিকে নতুন ট্যাবে সরানোর পরিবর্তে সরিয়ে দিন


10

আমি প্রায়শই একটি ট্যাব পৃষ্ঠায় অস্থায়ীভাবে বাফারটিকে সর্বোচ্চ করতে চাই এবং তারপরে আমি যে পুরানো বাফার কনফিগারেশনটি দেখছিলাম তাতে ফিরে যেতে চাই। <c-w>oএটির মতো কিছু করার জন্য আমার বর্তমান কর্মপ্রবাহটি হ'ল হয় অন্য সমস্ত বাফার ব্যবহার করে বন্ধ করে দেওয়া বা আমি বর্তমানে তার নিজের ট্যাবে যে বাফারটি দেখছি তা সরিয়ে নেওয়া <c-w>T। দ্বিতীয় পদ্ধতির সমস্যা হ'ল এটি মূল ট্যাব পৃষ্ঠা থেকে বাফারটি সরিয়ে দেয়।

আমি তিনটি ফাইল পূরণ a.txt, b.txtএবং c.txtসঙ্গে a, bএবং cযথাক্রমে।

% echo a > a.txt
% echo b > b.txt
% echo c > c.txt

আমি যখন এই ট্যাব পৃষ্ঠায় এই তিনটি ফাইল খুলি, তখন আমি নিম্নলিখিতটি পাই।

এখানে চিত্র বর্ণনা লিখুন

তারপরে আমি a.txtনিজেই কোনও ট্যাবে যেতে পারি । আমি যখন করি তবে a.txtমূল ট্যাব পৃষ্ঠা থেকে সরানো হবে। (সুতরাং এটি পরে হবে <c-w>Tgt)

এখানে চিত্র বর্ণনা লিখুন

আমি <c-w>Tমূল বাফারের বিষয়বস্তু সংরক্ষণ করার জন্য চাপ দিয়ে যে সময়টি বেছে নেওয়ার জন্য চাপ দিয়েছি সেই মুহুর্তে আমি যে মুহুর্তে কেবলমাত্র বাফার যুক্ত একটি নতুন ট্যাব পৃষ্ঠা তৈরি করব এবং তারপরে আমি নতুন ট্যাব পৃষ্ঠাটি ফোকাস করব সৃষ্টি করেছেন। অন্য কথায়, <c-w>Tমূল ট্যাব পৃষ্ঠাটি সংরক্ষণ করা হয় এবং এখন a.txtদুটি ট্যাব পৃষ্ঠায় রয়েছে ঠিক প্রায় একই মত একটি কমান্ড ।

এই কাজ করতে একটি উপায় আছে কি?

উত্তর:


13

আমি নিশ্চিত না তবে আপনি চেষ্টা করতে পারেন :tab split(বা সংক্ষিপ্ত সংস্করণ :tab sp)।

:splitকমান্ড ভিউপোর্ট প্রদর্শন করার প্রতিলিপি করা উচিত a.txt, যখন :tabপরিবর্তক ডেডিকেটেড ট্যাব পৃষ্ঠায় এই ভিউপোর্ট সরানো উচিত।


আপনি যদি এর আচরণ পরিবর্তন করতে চান তবে আপনি C-w Tএটির মতো পুনরায় তৈরি করতে পারেন:

nnoremap <C-w>T :tab split<CR>

আরও সাধারণভাবে, আপনি যখনই কোনও কমান্ড খুঁজে পান যা উইন্ডোটি বিভক্ত হয় এবং আপনি তার পরিবর্তে এটি একটি নতুন ট্যাব পৃষ্ঠা তৈরি করেন, আপনি এটির সাথে উপসর্গ করতে পারেন :tab

এটি ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, নতুন ট্যাব পৃষ্ঠায় সহায়তা বাফারটি পড়তে:

:tab help {your_topic}

ডিফল্টরূপে, নতুন ট্যাব পৃষ্ঠা বর্তমানের পরে উপস্থিত হবে। তবে আপনি যদি এটি অন্য কোথাও প্রদর্শিত হতে চান তবে আপনি :tabএকটি গণনা সহ উপসর্গ করতে পারেন ।

উদাহরণস্বরূপ, তৃতীয়টির পরে কোনও ট্যাব পৃষ্ঠায় বর্তমান ভিউপোর্টটি নকল করতে, আপনি টাইপ করতে পারেন:

:3tab split

এবং এটিকে প্রথম হিসাবে প্রদর্শিত করতে:

:0tab split

আরও তথ্যের জন্য, আপনি পড়তে পারেন :h :tab:

:[count]tab {cmd}                   *:tab*
        Execute {cmd} and when it opens a new window open a new tab
        page instead.  Doesn't work for |:diffsplit|, |:diffpatch|,
        |:execute| and |:normal|.
        If [count] is given the new tab page appears after the tab
        page [count] otherwise the new tab page will appear after the
        current one.
        Examples:

            :tab split      " opens current buffer in new tab page
            :tab help gt    " opens tab page with help for "gt"
            :.tab help gt   " as above
            :+tab help      " opens tab page with help after the next
                            " tab page
            :-tab help      " opens tab page with help before the
                            " current one
            :0tab help      " opens tab page with help before the
                            " first one
            :$tab help      " opens tab page with help after the last
                            " one

2

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

ফাংশনটির সাথে একটি সমস্যা হ'ল এটি পূর্বের বাফার-উইন্ডো জুটি ( set numberযেমন চালু আছে কি নেই) থেকে রাজ্যের কিছুটিকে নকল করে না । কিছুটা অনুমান করা, c-w Tসম্ভবত এই সমস্যা নেই কারণ কোনও সদৃশ সঞ্চালিত হয় না এবং উইন্ডোটি কেবলমাত্র পুনঃপ্রেজিত হয়।

বাফার, ট্যাবগুলি এবং উইন্ডোগুলির মতো জিনিসের জন্য ভিমে কয়েকটি 1 ভিত্তিক তালিকা রয়েছে। যতদূর আমি বলতে পারি, এগুলি 1-ভিত্তিক কারণ 0কীটি একটি লাইনের শুরুতে যেতে ব্যবহৃত হয় এবং ফলস্বরূপ একটি সংখ্যাগত তর্ক হিসাবে শূন্যকে অতিক্রম করা অসম্ভব।

এই কার্যকারিতাটি অনুকরণ করার জন্য আমরা তিনটি তালিকা সম্পর্কে যত্নশীল:

  • ট্যাব পৃষ্ঠাগুলির বিশ্বব্যাপী তালিকা
  • উইন্ডোগুলির প্রতি- [ট্যাব পৃষ্ঠা] তালিকা
  • বাফারদের বিশ্বব্যাপী তালিকা

আমরা এই সমস্ত মান সংরক্ষণ করি, তারপরে "ট্যাবনেউ" এর মাধ্যমে একটি নতুন ট্যাব তৈরি করব। নতুন ট্যাবগুলি সর্বদা ডানদিকে তৈরি করা হয়, তাই আমরা যে ট্যাবটি tabnewথেকে থাকব তার নীচের সূচিগুলির কোনওটিই অবৈধ। (এটি করার আরও শক্তিশালী উপায় সম্ভবত আরও ভাল হবে)।

tabnewকমান্ড এছাড়াও নতুন ট্যাব এবং এটি মধ্যে একক উইন্ডো ফোকাস চলে আসে। সেখান থেকে আমরা bufferকমান্ডটি ব্যবহার করতে পারি বাফারটিতে একটি ভিউ তৈরি করতে যা মূলত ফোকাস করেছিল।

তারপরে আমরা সেই ট্যাবে ফোকাস পুনরুদ্ধার করতে মূল ট্যাবটির সংরক্ষিত সূচকটি ব্যবহার করি। এবং তারপরে, মূলত প্যারানয়েয়ার বাইরে, আমরা সেই ট্যাবটির মধ্যে ফোকাসটি মূল উইন্ডোতে সেট করি। ভিমটি মনে হচ্ছে মনে হচ্ছে কোন উইন্ডোটি অ-দৃশ্যমান ট্যাবগুলিতে ফোকাস করেছে, তবে আমি তার উপর নির্ভর করতে পছন্দ করি না।

(কয়েকটি স্টাইলিস্টিক পয়েন্ট: সুস্পষ্ট সংখ্যাসূচক রূপান্তর 0+, গ্লোবাল ভেরিয়েবল এবং জোর দেওয়া সমস্ত উদ্দেশ্যমূলক)

function! TabDuplicate()
  " set vars, sanity checking
  let g:tabdup_win      = 0+ winnr()
  let g:tabdup_buf      = 0+ bufnr('%')
  let g:tabdup_tabpage  = 0+ tabpagenr()
  call assert_true(g:tabdup_win > 0)
  call assert_true(g:tabdup_buf > 0)
  call assert_true(g:tabdup_tabpage > 0)
  " make a new tab page,
  " the new tab page will have focus
  " none of the indices, which are all
  " less than the current index, are
  " invalidated by creating a new tab
  execute "tabnew"
  " visit the buffer we saved
  execute "buffer " . g:tabdup_buf
  " return to the original tab page
  execute "tabnext " . g:tabdup_tabpage
  " return focus to original window
  execute g:tabdup_win . " windcmd w"
endfunction
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.