কোনও ট্যাব স্থানান্তর করার জন্য কি ভিআইএম কমান্ড আছে?


200

আমি কীভাবে আমার বর্তমান ট্যাবের অবস্থান / ক্রমটি পরিবর্তন করতে পারি Vim? উদাহরণস্বরূপ, আমি যদি আমার বর্তমান ট্যাবটিকে প্রথম ট্যাব হিসাবে প্রতিস্থাপন করতে চাই?

উত্তর:


271

:tabmআপেক্ষিক বা শূন্য-সূচক পরম যুক্তি ব্যবহার করে আপনি কোনও ট্যাব স্থানান্তর করতে পারেন ।

চূড়ান্ত:

  • আমি অবস্থানে ট্যাব সরান: :tabm i

আপেক্ষিক:

  • ট্যাব আমি অবস্থানগুলি ডানদিকে সরান: :tabm +i
  • ট্যাব আমি অবস্থানগুলি বাম দিকে সরান: :tabm -i

এটি তুলনামূলকভাবে নতুন বৈশিষ্ট্য। সুতরাং যদি এটি কাজ না করে তবে আপনার ভিএম আপডেট করার চেষ্টা করুন।


2
এটি কাজ করে না। : ট্যাবাম আপেক্ষিক যুক্তি গ্রহণ করে না, যদিও এটি সত্যই হওয়া উচিত।
গ্যাভিন

6
আপনার ভিমটি এটি না হলে আপডেট করা উচিত, কারণ :tabmভিএম .3.৩ এ আপেক্ষিক যুক্তি গ্রহণ করে।
maybeshewill

আমার ভিআইএম আছে - ভি আইএমপ্রোভড 7.3 (2010 আগস্ট 15, সংকলিত এপ্রিল 2 2013 09:17:34) অন্তর্ভুক্ত প্যাচগুলি: 1-547 এবং + - সেখানে সমর্থিত নয়, ডকুমেন্টেশন বলেছে আমার শূন্য বা ধনাত্মক মান নির্দিষ্ট করা উচিত
ভ্লাদিমির

6
দ্রষ্টব্য যে পরম অবস্থানটি শূন্য-সূচক, যা কিছুটা অদ্ভুত, যেহেতু ভিআইএম ট্যাবগুলি 1-সূচকযুক্ত প্রদর্শন করে (বা এটি কেবল আমার vim কনফিগার হতে পারে)
এলিয়ট ফস্টার

1
এটি মোড়ানোর কেসটি পরিচালনা করে না
অ্যান্ডি রে

38

আপনি কি বর্তমান ট্যাবটি সরানো মানে? এটি ট্যাবমোভ ব্যবহার করে কাজ করে।

:tabm[ove] [N]                                          *:tabm* *:tabmove*
            Move the current tab page to after tab page N.  Use zero to
            make the current tab page the first one.  Without N the tab
            page is made the last one.

আমার কাছে দুটি কী বাইন্ডিং রয়েছে যা আমার বর্তমান ট্যাবটি বামে বা একটি ডানে সরিয়ে নিয়েছে। খুব সহজ!

সম্পাদনা: এখানে আমার ভিআইএম ম্যাক্রো। আমি কোনও বড় ভিএম কোডার নই , তাই সম্ভবত এটি আরও ভাল করা যেতে পারে তবে এটি আমার পক্ষে কাজ করে:

" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
    " get number of tab pages.
    let ntp=tabpagenr("$")
    " move tab, if necessary.
    if ntp > 1
        " get number of current tab page.
        let ctpn=tabpagenr()
        " move left.
        if a:direction < 0
            let index=((ctpn-1+ntp-1)%ntp)
        else
            let index=(ctpn%ntp)
        endif

        " move tab page.
        execute "tabmove ".index
    endif
endfunction

এর পরে আপনি কীগুলি বাঁধতে পারেন, উদাহরণস্বরূপ আপনার এ .vimrc:

map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>

এখন আপনি F9 বা F10 টিপে আপনার বর্তমান ট্যাবটি সরাতে পারেন।


হুম ... তাই কোনও ট্যাবটি এক অবস্থানের বাম বা ডানদিকে নিয়ে যাওয়ার জন্য একটি স্ক্রিপ্ট দরকার? আপনি এটি পেস্ট করতে পারেন?
গ্যাভিন

2
আমি আমার স্ক্রিপ্টগুলি যুক্ত করেছি। এটি কি আপনাকে সাহায্য করে?
hochl

25

আমি একই সন্ধান করছিলাম এবং কিছু পোস্টের পরে আমি একটি ফাংশনের চেয়ে সহজ উপায় খুঁজে পেয়েছি:

:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left

Tabpagenr () প্রকৃত ট্যাব অবস্থান ফেরৎ, এবং tabmove ইনডেক্স ব্যবহার করে।

আমি ডানদিকে Ctrl + L এবং বামটি Ctrl + H তে ম্যাপ করেছি:

map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>

1
এটি মোড়ানোর কেসটি হ্যান্ডেল করে না, এফওয়াইআই
অ্যান্ডি রে

2
:execute "tabmove" tabpagenr() + 1 <CR>ডানদিকে যাওয়ার জন্য আমাকে ব্যবহার করতে হয়েছিল। জন্য MacVim 8.0.1420 (144)
পল অলিভার

5

এন বর্তমান ট্যাব সরান তম অবস্থান

:tabm n

nঅবস্থানটি চিহ্নিত করার জন্য একটি সংখ্যা কোথায় রয়েছে (শূন্য থেকে শুরু করে)


ট্যাবগুলি বাম / ডানদিকে সরান

আমি মনে করি যে আরও ভাল সমাধান হ'ল ট্যাবটি আপনি যে নতুন অবস্থানে চান সেটির সংখ্যাসূচক মান বের করার পরিবর্তে বাম বা ডানটিকে বর্তমান অবস্থানে নিয়ে যাওয়া।

noremap <A-Left>  :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>

উপরের কীম্যাপস দিয়ে আপনি বর্তমান ট্যাবটি সরাতে সক্ষম হবেন:

  • বাম দিকে ব্যবহার করে: Alt +Left
  • ডানদিকে ব্যবহার করে: Alt +Right

+tabmoveএবং এর মধ্যে কোনও পার্থক্য আছে কি tabmove+? পজিশন কি ব্যাপার?

4

অন্যান্য উত্তরের সূক্ষ্ম পরামর্শ ছাড়াও, আপনি যদি মাউস সমর্থন সক্ষম করে থাকেন তবে আপনি কেবল তা সরাতে মাউসের সাহায্যে ট্যাবগুলি টেনে আনতে পারেন।

এটি GUI উইজেট ট্যাব বা GUI মোডে টার্মিনাল স্টাইল ট্যাব ব্যবহার করেই হোক না কেন ম্যাকভিম এবং অন্যান্য জিইউআই ভিআইএম বাস্তবায়নে ডিফল্টরূপে।

এটি খাঁটি tty মোড ভিমেও কাজ করে, যদি আপনার কাছে set mouse=aএকটি উপযুক্ত টার্মিনাল থাকে (একটি এক্সটার্ম এবং এর বেশিরভাগ অনুকরণকারী, যেমন জিনোম-টার্মিনাল, টার্মিনাল.এপ, আইটিার্ম 2, এবং পিটিটিওয়াই / কিটিটিওয়াই), একটি দৃশ্যের নাম দেওয়ার জন্য। দ্রষ্টব্য যে 222 কলামের বাইরেও মাউস ক্লিকগুলি প্রয়োজন set ttymouse=sgr; দেখতে সালে তেজ, কেন আমার মাউস গত 220th কলাম কাজ করে? যে পটভূমি জন্য।

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


মাউস ব্যবহার করে ট্যাবটি পুনরায় সাজানোর পরে, আমি আর মাউস ব্যবহার করে ফলকে পুনরায় আকার দিতে পারি না। পরিবর্তে, যতবার আমি মাউস কার্সারটিকে ক্লিক এবং টেনে নিয়ে যাই ততবার ট্যাবগুলি আবার সাজিয়ে তোলে, যেন মাউস ক্লিক করে "আটকে"। এখানে কি হতে পারে আপনার কোনও ধারণা আছে?
gmile

: জিম, আমি আলাদাভাবে প্রশ্ন পোস্ট করেছেন stackoverflow.com/questions/43734501/...
gmile

1

কোনও কারণে, ফাংশন উত্তরটি আমার পক্ষে কাজ করা বন্ধ করে দিয়েছে। আমি vim-ctrlspace সঙ্গে একটি বিরোধ সন্দেহ । নির্বিশেষে, ফাংশন উত্তরের গণিতটি অপ্রয়োজনীয়, কারণ ভিমটি ফাংশনে অন্তর্নির্মিত ট্যাবগুলি বাম এবং ডান স্থানান্তর করতে পারে। আমাদের কেবল মোড়ানোর কেসটি পরিচালনা করতে হবে , কারণ ভিম ব্যবহারকারী বান্ধব নয়।

" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
    let s:current_tab=tabpagenr()
    let s:total_tabs = tabpagenr("$")

    " Wrap to end
    if s:current_tab == 1 && a:direction == -1
        tabmove
    " Wrap to start
    elseif s:current_tab == s:total_tabs && a:direction == 1
        tabmove 0
    " Normal move
    else
        execute (a:direction > 0 ? "+" : "-") . "tabmove"
    endif
    echo "Moved to tab " . tabpagenr() . " (previosuly " . s:current_tab . ")"
endfunction

" Move tab left or right using Command-Shift-H or L
map <D-H> :call TabMove(-1)<CR>
map <D-L> :call TabMove(1)<CR>

-tabmএবং +tabmআমার তেজ 7.4 সঠিকভাবে ট্যাব সরাতে পারবেন না। এছাড়াও আমার :help tabmএটিকে বৈধ বাক্য গঠন হিসাবে তালিকাভুক্ত করে না। তাই আমি গত প্রতিস্থাপিত else execute ...endifসঙ্গে elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif ব্যবহার পাবলো এর উত্তর
cfi

শুরু / শেষ করার জন্য মোড়কের জন্য, আমি এখন এই সমাধানটি নিজেরাই ব্যবহার করছি কারণ আমি পড়তে ও বজায় রাখতে দুটি ফাংশন এবং তার কোড ক্লিনার ব্যবহার করেছি। কেবলমাত্র ক্রমের ক্রম tabmoveএবং -/ লাইনের +সাইনটি উল্টিয়ে দিয়েছে execute
rld।

1

@ মায়বাবেশিলের উত্তর থেকে আপেক্ষিক যুক্তি ব্যবহার করে আমার ম্যাক্রোটি এখানে:

" Shortcuts to move between tabs with Ctrl+Shift+Left/Right
function TabLeft()
   if tabpagenr() == 1
      execute "tabm"
   else
      execute "tabm -1"
   endif
endfunction

function TabRight()
   if tabpagenr() == tabpagenr('$')
      execute "tabm" 0
   else
      execute "tabm +1"
   endif
endfunction

map <silent><C-S-Right> :execute TabRight()<CR>
map <silent><C-S-Left> :execute TabLeft()<CR>

এটি মোড়ানো ক্ষেত্রে পরিচালনা করে।

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