ভিএম-তে কোনও বাফারে চলে যাওয়ার দ্রুততম উপায়?


43

ভিমে একটি বাফার নির্বাচন করার একটি উপায় হ'ল বাফার তালিকাটি ব্রাউজ করা, স্ট্যান্ডার্ড কমান্ড হিসাবে ব্যবহার করে :lsবা উইন্ডোতে একটি তালিকা ব্রাউজ করার জন্য কিছু বাহ্যিক প্লাগইন / উইমস্ক্রিপ্ট কোড সহ

ধরা যাক আমি যতটা সম্ভব দ্রুত, সরাসরি একটি বাফারে ঝাঁপিয়ে পড়তে চাই।

অনুক্রমিক মোডে বাফার তালিকাটি অতিক্রম করতে আমি এখন <C-J> <C-K>আমার .vimrc এ সেট করে শর্টকাট ব্যবহার করি:

" move among buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>

আরেকটি উপায় (সরাসরি অ্যাক্সেস) যেতে পারে সংখ্যা দ্বারা সুইচিং : বুদ্ধিমান বাফার নম্বর, এটি দ্বারা অনুসৃত বাফার সংখ্যা লিখে সরাসরি সুইচ করা সম্ভব <C-^>। সুতরাং আমি যদি 5 নম্বর বাফারে স্যুইচ করতে চাই তবে আমি টিপতাম 5<C-^>

তবে এটি আমার পক্ষে কাজ করছে না বলে মনে হচ্ছে (আমি ইতালীয় কীবোর্ড সহ উইন্ডোজ গেস্টের কাছ থেকে উবুন্টু বাক্সে 7.৪ ব্যবহার করি )। আমি সন্দেহ করি কারণ ^চরিত্রটি ইতালীয় কীবোর্ডের বড় হাতের কীতে রয়েছে তাই আসলে ^আমাকে টিপতে হবেSHIFT-^

কোন ধারনা?


2
আপনি কি <c-6>পরিবর্তে টিপতে পারেন <c-^>?
পিটার রিঙ্কার

আপনি কি Ctrl-1 মানে বাফার নম্বর 1 এ যেতে চান? দুর্ভাগ্যক্রমে কাজ করে না। কিছুই ঘটবে না
জর্জিও রবিনো

1
না। কিছু টার্মিনাল Ctrl-6 বুঝতে পারে যা মার্কিন কীবোর্ডে Ctrl- as এর সমান।
পিটার রিনকার

2
+1 দুর্দান্ত, এটি কাজ! আমি একটি ইতালীয় কীবোর্ড লেআউট (পুটি টার্মিনাল এমুলেটর ব্যবহার করে) ব্যবহার করি। সুতরাং: 1<C-6>বাফার নম্বর 1 এ স্যুইচ করুন। ধন্যবাদ!
জর্জিও রবিনো

আপনি CtrlSpace ব্যবহার করার চেষ্টা করতে পারেন ।
হংকবো লিউ

উত্তর:


51

:bকমান্ড একটি গ্রহণ করতে পারেন সাবস্ট্রিং বাফার যা তোমাদের কাছে ভ্রমণ করতে চান, যা খুব সুবিধাজনক ফাইল নাম।

উদাহরণস্বরূপ, যদি আপনি তিন বাফার আছে যদি foo, barএবং bazতারপর,

  • :b barbarফাইলটিতে স্যুইচ করবে ।

  • :b ofooফাইলটিতে স্যুইচ করবে ।

  • :b aআপনাকে একটি ত্রুটি দেবে কারণ এর অর্থ হয় barবা হতে পারে bazতবে আপনি নামটি আরও নির্দিষ্ট করে ঠিক করতে পারেন, উদাহরণস্বরূপ : r Enter,।

এটি খুব দরকারী হতে পারে, কারণ এর পরিবর্তে এর অর্থ

:buffer very/very/long/path/to/a/veryVeryLongFileName.txt

আপনি যেমন কিছু করতে পারেন

:b LongFileName

যা অনেক খাটো এবং সহজ।

আপনি যদি এটি ব্যবহার করতে চান তবে এই কমান্ডটি একটি সংখ্যাও নিতে পারে:

:b 5

8
আংশিক বাফার নাম ব্যবহার সম্পর্কে একটি সতর্কতা: যদি কিছু বাফারের পথে শব্দের সীমানার শুরুতে আংশিক বাফার নামটি উপস্থিত হয়, তবে শব্দের মাঝখানে আংশিক নামের কোনও বাফার :bআদেশ দ্বারা অ্যাক্সেসযোগ্য হবে না । উদাহরণস্বরূপ, যদি আপনার দুটি বাফার থাকে path/to/fooএবং path/to/tofuকমান্ডটি :b f<Tab>কখনই মেলে না path/to/tofu, কারণ এটি কোনও শব্দের শুরুতে মেলে path/to/foo
tommcdo

2
:5bতখন কিছুটা খাটো :b 5 ;-)
জোয়েটউইডেল

15

এটি আমি ব্যবহার করি:

nnoremap <Leader>b :ls<CR>:b<Space>

এখন টিপলে উপলব্ধ বাফারগুলি তালিকাভুক্ত\b করবে এবং আপনার জন্য প্রস্তুত করবে prepare:b

তারপরে আপনি কেবল বাফার নম্বরটি টাইপ করতে পারেন এবং এন্টার টিপুন।

অথবা আপনি ফাইলের অংশটি টাইপ করতে পারেন এবং এন্টার টিপুন। (তবে আমি সাধারণত এন্টার টিপানোর আগে ট্যাবটিকে আঘাত করি, আমি ডান বাফার পেয়েছি কিনা তা পরীক্ষা করতে If না হলে আমি ট্যাবকে সাইকেল চালিয়ে যাচ্ছি যতক্ষণ না আমি নিজের পছন্দ মতোটি পেয়েছি))


আসলে, আমি উপরেরটির একটি সামান্য টুইটের সংস্করণ ব্যবহার করছি:

nnoremap <C-e> :set nomore <Bar> :ls <Bar> :set more <CR>:b<Space>

এটি -- More --প্রম্পট প্রদর্শিত হতে বাধা দেবে যখন আপনার কাছে তাদের প্রদর্শিত করার জন্য উপলব্ধ লাইনগুলির চেয়ে বেশি বাফার থাকে।

তবে আপনার যদি সাধারণত 'more'বিকল্পটি অক্ষম থাকে তবে এই ম্যাপিংটি আপনাকে সত্যিই বিরক্ত করবে, কারণ এটি করার 'more'পরে বিকল্পটি পুনরায় সক্ষম করে ls!


1
সত্যি কথা বলতে হবে, আমি আসলে সেগুলির কোনওটিই ব্যবহার করি না, আমি আমার নিজস্ব প্লাগইন ব্যবহার করি তবে কার্যকারিতাটি খুব সাদৃশ্যপূর্ণ। প্লাগইনটি সহ, আমি আন-ওপেন হওয়া বাফারগুলির ফাইল নামগুলিতে ট্যাব-সম্পূর্ণ সম্পাদন করতে পারি।
জোয়েটউইল

1
যদিও [count]<C-^>আপনি যখন বাফার নম্বরটি জানেন তখন এই কৌশলটি ব্যবহারের মতো তত দ্রুত নয়, আপনি যখন জানেন না তখন এটি বেশ কার্যকর।
জোয়েটউইডেল

2
আপনার নোটের জন্য joeytw رکن ধন্যবাদ। আমি আপনার প্লাগইন asap পরীক্ষা করব। আমার ক্ষেত্রে (উপরে কীবোর্ড ইস্যুটি দেখুন) [count]<C-6>জানা বাফারে স্যুইচ করার দ্রুততম
উপায়টি

হ্যাঁ আমি [count]<C-^>এই দিনগুলিও ব্যবহার করছি । তবে এর মানে হল যে মিনি বাফ এক্সপ্লোরার বা এর অনুরূপ কিছু চালানো দরকার, বাফার সংখ্যাগুলি কী তা জানতে!
জোয়েটউইডেল

আপনার <CR> এবং <SPACE> দরকার কেন? প্রথমে আমার কাছে এটি উপস্থিত হয়েছিল, যেন এগুলি ছাড়া এটি ঠিক কাজ করে ...
ফেলিক্স ক্রেজোলারা

9

:CtrlPBufferপ্লাগইন থেকে CtrlP (4k ★)

এই প্লাগইনটির প্রধান বৈশিষ্ট্যটি ভিজ্যুয়াল প্রতিক্রিয়া সহ সুবিধামতভাবে একটি আলাদা বাফার খোলার জন্য একটি अस्पष्ट মেলানো সরবরাহ করা।

সাথে अस्पष्ट বাফার তালিকাটি খুলুন :CtrlPBufferবা মোডে পরিবর্তন করতে <C-p>অনুসরণ করুন টিপুন ।<C-b>buffer

আপনি যে বাফারটি খুলতে চান তা নির্দিষ্ট করতে পর্যাপ্ত পরিমাণ অক্ষর লিখুন।
আপনি তালিকাটি ব্যবহার করতে পারেন <C-j>এবং <C-k>চক্রটি করতে পারেন এবং ম্যানুয়ালি বাফারটি নির্বাচন করতে পারেন।

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

কাস্টমাইজেশন

আপনি যদি সাথে সাথে বাফার তালিকাটি খুলতে চান <C-p>, তবে আপনার ভিআরসিআরিতে নিম্নলিখিত লাইনটি যুক্ত করুন:

let g:ctrlp_cmd = 'CtrlPBuffer'

আপনি <C-f/b>সিটিআরএলপি উইন্ডোর মোডটি স্যুইচ করতে ব্যবহার করতে পারেন।

আমি ব্যক্তিগতভাবে ব্যবহার let g:ctrlp_cmd = 'CtrlPMRU'। সর্বাধিক ব্যবহৃত (এমআরই) তালিকায় খোলা বাফারও রয়েছে। আপনি যদি বিভিন্ন সিটিআরএলপি মোড ব্যবহার করেন এবং আপনার শেষ মোডে আটকাতে চান তবে আপনি সেট করতে পারেন let g:ctrlp_cmd = 'CtrlPLastMode [--dir]'

অনুরূপ প্লাগইন

আরও প্লাগইন রয়েছে যা অস্পষ্ট ম্যাচিংয়ের সাথে ইন্টারেক্টিভ প্রম্পট সহ একটি বাফার তালিকা সরবরাহ করে eg

অন্ধকার দিক বনাম হালকা দিক

(অর্থাত্ প্লাগইন-ভারী ভিএম সেটআপ বনাম, ভিআইم উপায়)

আপনি আরও জটিল প্লাগইনগুলি ব্যবহার করার সিদ্ধান্ত নেওয়ার আগে @ ডুরকনব এবং @ জোয়েটউইডল দ্বারা উত্তরগুলি অধ্যয়ন করুন । বিশেষত, যদি ওয়ান-লাইনার ইতিমধ্যে আপনার প্রয়োজনীয়তা পূরণ করে তবে এটি পরীক্ষা করুন।

  1. nnoremap <Leader>b :b <C-d>
  2. nnoremap <Leader>b :ls<Cr>:b<Space>

কেবল বাফার স্যুইচিংয়ের জন্য প্লাগইন ইনস্টল করা ওভারকিল হতে পারে। Https://www.vi-improved.org/rec सिफारिशগুলি এবং ড্র্রু নিল দ্বারা নিবন্ধটি ' করাতকে তীক্ষ্ণ করা ' শীর্ষক মন্তব্যগুলিও দেখুন ।


হ্যাঁ হটস্কে, আমি স্বীকার করি আমি প্রায়শই ব্যবহার করি: CtrlPBuffer
জর্জিও

আমি map <leader>a <ESC>:CtrlPBuffer<CR><CR>আগে খোলা বাফারে ঝাঁপিয়ে <leader>a<leader>b
রল্ফ

@ রোল্ফ: আপনি কি জানেন <C-^>(= <C-6>)? দেখতে :h CTRL-^। আফাইক, আপনার ম্যাপিংটি যা দেখে <leader>aমনে হচ্ছে এটি তা করে। সুতরাং আমি মনে করি আপনি কেবল একটি উদাহরণ এনেছেন কেন লোকেরা বলে যে প্লাগইনগুলি ব্যবহার করা ভিআইএম ব্যবহারকারীকে নিয়ে যেতে পারে যারা জানেন না যে ভিম ইতিমধ্যে তার নিজের থেকে কী করতে পারে।
হটস্কে

@ হটস্কে: না, আমি এটি জানতাম না। কিছু শিখেছি জানত, ধন্যবাদ! যদিও আমি পুনরায় পুনর্নির্মাণ করছি <সি - ^>।
রলফ

ভ্যানিলা ভিমে সহ <সিডি> এর দুর্দান্ত রেফারেন্স। সেই রেফারেন্স আমি আর কোথাও দেখিনি।
র‌্যাডকে

8

জোয়েটউইডল এবং ডোরকনব দ্বারা সত্যিকারের দরকারী উত্তরগুলি ছাড়াও ভুলে যাবেন না :b#, যা সর্বাধিক ব্যবহৃত ব্যাফারে স্যুইচ করে। এটি ন্যায়বিচারের সাথেও করা যেতে পারে <C-^>। যখন আপনার প্রচুর বাফার থাকে এবং আপনি ক্রমাগত তাদের মধ্যে স্যুইচ করেন, সর্বাধিক সাম্প্রতিক বাফারটি সাধারণত সবচেয়ে সাধারণ গন্তব্য।

ব্যক্তিগতভাবে আমি অনেক পদ্ধতির সংমিশ্রণ ব্যবহার করি। আমি যখন প্রধানত দুটি বাফারের সাথে কাজ করছি এবং বাকিটি কেবলমাত্র মাঝে মাঝে উল্লেখের জন্য খোলা হয়, তখন আমি তাদের সাথে :b#বা এর সাথে স্যুইচ করার ঝোঁক করি <C-^>। যখন আমি তাদের বেশিরভাগের সাথে কাজ করতে এবং আরও প্রায়শই স্যুইচ করতে হয়, আমি সেগুলি সম্পন্ন করতে আমি নাম্বার (জোয়েটউইডল টিপ হিসাবে), বা নামের কিছু অংশ (ডোরকনব্ব টিপ হিসাবে) ব্যবহার করি complete নামগুলি বিভ্রান্ত করার পরে এবং সেখানে প্রচুর বাফার খোলা থাকে (সাধারণত 10 এরও বেশি), আমি Ctrl-P প্লাগইনটি প্রায়শই ব্যবহার করি ( https://github.com/kien/ctrlp.vim ) দুটি দ্রুত কী-স্ট্রোকের সাথে আমি তালিকা পেয়েছি আমি তাদের যা চাই তা দ্রুত খুঁজে পেতে আমি তাদের উপর শক্তিশালী ফাসি অনুসন্ধান ব্যবহার করতে সক্ষম হয়েছি।


2
<সি - alone> একা (আমার ক্ষেত্রে <C-6> যেমন পিটার রিঙ্কার পরামর্শ দিয়েছেন) কেবল 2 বাফার ক্ষেত্রে ভাল কৌশল :-)
জর্জিও রবিনো

5

[bএবং ]bপ্লাগইন থেকে vim-unimpaired(> 2 কে ★)

আপনি যদি ইনস্টল করা হয়ে থাকে vim-unimpaired, আপনি ব্যবহার করতে পারেন

  • [b( :bp[revious]) এবং
  • ]b( :bn[ext])

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

  • [B( :bf[irst]) এবং
  • ]B( :bl[ast])।

এমন আরও অনেকগুলি বন্ধনী-ম্যাপিং রয়েছে vim-unimpairedযা আপনাকে দরকারী মনে করতে পারে। তারা সকলে একই স্কিম অনুসরণ করে যা তাদের মুখস্ত করে রাখা সহজ করে।

অন্ধকার দিক বনাম হালকা দিক

এই প্লাগইনটি লাইটওয়েট এবং 'ভিমিশ' হিসাবে বিবেচনা করা যেতে পারে। এটি #vim সম্প্রদায় দ্বারা "ক্ষতি করে না" প্লাগইন হিসাবে চিহ্নিত করা হয়েছে ।


+1 এছাড়াও আপনি একটি গণনা সরবরাহ করতে পারেন তা লক্ষণীয় worth 3[bফিরে তিনটি বাফার লাফিয়ে।
জোয়েটউইডল

1

বর্তমানে আমি স্যুইচ করতে <Leader>+ numberকী ব্যবহার করছি । লিডার কী আমার <space>চাবি। উইন্ডোটির উপরে বাফার এনআরআই প্রদর্শন করতে আমি ভিএম-এয়ারলাইন ব্যবহার করি ।

" airline settings
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#enabled = 1

যদিও বুফনার প্রায়শই 10 ছাড়িয়ে যায়, তাই আমি আমার নিজের ম্যাপিংটি টুইক করি, যদি numberএকমাত্র ম্যাচ হয় তবে অবিলম্বে বাফারটি স্যুইচ করুন, অন্যথায় <space>নিশ্চিত হওয়ার জন্য আরও সংখ্যার ইনপুট বা কীটির জন্য অপেক্ষা করুন:

nnoremap <expr> <Leader>1 tweak#wtb_switch#key_leader_bufnum(1)
nnoremap <expr> <Leader>2 tweak#wtb_switch#key_leader_bufnum(2)
nnoremap <expr> <Leader>3 tweak#wtb_switch#key_leader_bufnum(3)
nnoremap <expr> <Leader>4 tweak#wtb_switch#key_leader_bufnum(4)
nnoremap <expr> <Leader>5 tweak#wtb_switch#key_leader_bufnum(5)
nnoremap <expr> <Leader>6 tweak#wtb_switch#key_leader_bufnum(6)
nnoremap <expr> <Leader>7 tweak#wtb_switch#key_leader_bufnum(7)
nnoremap <expr> <Leader>8 tweak#wtb_switch#key_leader_bufnum(8)
nnoremap <expr> <Leader>9 tweak#wtb_switch#key_leader_bufnum(9)




func! tweak#wtb_switch#key_leader_bufnum(num)
    let l:buffers = tweak#wtb_switch#buflisted()
    let l:input = a:num . ""

    while 1

        let l:cnt = 0
        let l:i=0
        " count matches
        while l:i<len(l:buffers)
            let l:bn = l:buffers[l:i] . ""
            if l:input==l:bn[0:len(l:input)-1]
                let l:cnt+=1
            endif
            let l:i+=1
        endwhile

        " no matches
        if l:cnt==0 && len(l:input)>0
            echo "no buffer [" . l:input . "]"
            return ''
        elseif l:cnt==1
            return ":b " . l:input . "\<CR>"
        endif

        echo ":b " . l:input

        let l:n = getchar()

        if l:n==char2nr("\<BS>") ||  l:n==char2nr("\<C-h>")
            " delete one word
            if len(l:input)>=2
                let l:input = l:input[0:len(l:input)-2]
            else
                let l:input = ""
            endif
        elseif l:n==char2nr("\<CR>") || (l:n<char2nr('0') || l:n>char2nr('9'))
            return ":b " . l:input . "\<CR>"
        else
            let l:input = l:input . nr2char(l:n)
        endif

        let g:n = l:n

    endwhile
endfunc

func! tweak#wtb_switch#buflisted()
  return filter(range(1, bufnr('$')), 'buflisted(v:val)')
endfunc

কোডটি এখান থেকে আটকানো হয়েছে

যাইহোক, আমিও ব্যবহার করি <S-h>এবং এর <S-l>জন্য :bpএবং :bn, বা :tabpএবং :tabnযদি একাধিক ট্যাবপেজ বর্তমানে খোলা থাকে। এটা আমার পক্ষে বেশ স্বজ্ঞাত।


1

এই দিনগুলিতে আমি [buffer_number]<Ctrl-^>বাফারগুলি স্যুইচ করতে ব্যবহার করছি কারণ এটি খুব দ্রুত।

তবে বাফার নম্বরটি কীভাবে জানবেন? আমি মিনিবুফএক্সপ্লোরার ব্যবহার করি যাতে আমি সবসময় ভিমের শীর্ষে বাফার নম্বর দেখতে পারি।

আমি নিম্নলিখিত ম্যাপিংটিও ব্যবহার করি, কারণ <C-^>এক হাতে পৌঁছানো কিছুটা শক্ত।

:nmap <C-E> <C-^>

কোনও কনফিগার ছাড়াই একটি তাজা মেশিনে, আমি আবার পড়ে যাই :b [part_of_filename]<Tab><Enter>

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