বাফার ব্যবহারের আরও কার্যকর উপায় কী?


13

ইদানীং আমি যে প্লাগিনগুলি ব্যবহার করছি তার সংখ্যা হ্রাস করে চলেছি তাই আমি কেবল অন্তর্নির্মিত ভিম বৈশিষ্ট্যগুলি ব্যবহার করে উত্তরগুলি খুঁজছি।

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

এটি করার জন্য আমি নিম্নলিখিতগুলি করছিলাম:

  • :buffersখোলা বাফারগুলির তালিকা পেতে প্রথমে ব্যবহার করুন
  • আমি যে বাফারটি ব্যবহার করতে চাইছি তার নম্বরটি মনে রাখুন
  • Enterবাফারগুলির তালিকাটি বন্ধ করতে টিপুন
  • ব্যবহার করুন :bXসঙ্গে Xব্যবহারের বাফার সংখ্যা।

এই কর্মপ্রবাহটি আমার কাছে বেশ ভারী বলে মনে হয়েছিল তাই আমি নিম্নলিখিত লাইনগুলিকে আমার সাথে যুক্ত করেছি .vimrc:

" Improve the navigation in the buffers 
nnoremap <Leader><S-b> :B<CR> 
command! B call Buffers() 

function! Buffers() 
    execute "buffers" 
    let buffer=input("Enter a buffer:") 
    execute "b" . buffer 
endfunction 

এটি আমাকে একটি কমান্ড দেয় :B(এবং একটি ম্যাপিং) যা ফাংশনটিকে :buffersইনপুটটির জন্য অপেক্ষা করে এবং অবশেষে ইনপুটটির :bপরে কল করে।

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


3
আমি :lsঅনুসরণ করে যাচ্ছি :b#(প্রথমে ফিরতে হবে না বা পালানোর দরকার নেই, 'এলএস'-তে বাফার তালিকা থেকে সরাসরি যেতে পারব)) (মন্তব্য হিসাবে পোস্ট করা কারণ এটি উত্তর হিসাবে যথেষ্ট বলে মনে হচ্ছে না? এছাড়াও আমি ভাবছি কিনা আমি 'আমি কিছু মিস করছি এবং ভুল প্রশ্নের উত্তর
দিচ্ছি

2
@ লিন্ডা জিনে: যেমনটি আমি বলেছিলাম :b#যে আমি যা খুঁজছি তা নয় তবে হ্যাঁ যে আপনি সরাসরি :bচাপ না enterদিয়ে সরাসরি প্রবেশ করে কী-স্ট্রোক সংরক্ষণ করতে পারবেন তা আকর্ষণীয় is (
সত্যই

আমি অনুমান করছি যে লিন্ডা জিনের #চরিত্রটি আক্ষরিক #চরিত্রের পরিবর্তে একটি (বাফার) সংখ্যার স্ট্যান্ড-ইন হিসাবে বোঝানো হয়েছিল ।
বিট্রি

উত্তর:


12

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

বিপরীতে, আমি ট্যাব-সমাপ্তি অত্যন্ত সুবিধাজনক বলে মনে করি। আপনার জন্য কাজ করে এমন মানগুলিতে সঠিক বিকল্পগুলি সেট করা অনেক সাহায্য করতে পারে। এগুলি আমার কাছ থেকে প্রাসঙ্গিক লাইন vimrc (তারা আমার পক্ষে কাজ করে তবে তারা আপনার জন্য কাজ করতে পারে না তাই কেবল সেগুলি অনুলিপি করবেন না) :

nnoremap ,b :buffer *
set wildmenu
set wildignore+=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=*/min/*,*/vendor/*,*/node_modules/*,*/bower_components/*
set wildignore+=tags,cscope.*
set wildignore+=*.tar.*
set wildignorecase
set wildmode=full

এটির সাথে ডান বাফারটি খুব কমই পাঁচ বা ছয়টি কীস্ট্রোকের থেকে দূরে থাকে:

ট্যাব-সমাপ্তি


এটি আমাকে একটি কমান্ড দেয় :B(এবং একটি ম্যাপিং) যা ফাংশনটিকে :buffersইনপুটটির জন্য অপেক্ষা করে এবং অবশেষে ইনপুটটির :bপরে কল করে।

বহু বছর আগে ব্যারি আর্থার অনেক সহজ সমাধান নিয়ে এসেছিলেন যা তখন থেকেই বেশ জনপ্রিয় হয়ে উঠেছে:

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

যার মধ্যে আমি কয়েক বছর আগে কিছুটা বেশি বহুমুখী বৈকল্পিকের প্রস্তাব দিয়েছিলাম:

nnoremap gb :ls<CR>:b

গিগাবাইট


যেহেতু আমরা vimscript কথা বলা হয়, এখানে একটি চমৎকার সামান্য ফাংশন আমি কমান্ড মত তালিকার পরে ডান কমান্ড শহরের উপর অসম্পূর্ণ নিবন্ধ সঙ্গে যে "স্বয়ং-মান" কমান্ড-লাইন লিখেছেন :lsবা :ilist। উপরের ম্যাপিংগুলির মাধ্যমে সেই ফাংশনের সুবিধাটি হ'ল আমাকে নির্দিষ্ট ম্যাপিংগুলি মনে রাখতে হবে না। এটি ঠিক ভিমের মতো কাজ করে তবে একটি সামান্য বাঁক দিয়ে

" smooth listing
cnoremap <expr> <CR> <SID>CCR()

function! s:CCR()
    if getcmdtype() == ":"
        let cmdline = getcmdline()
            if cmdline =~ '\v\C^(dli|il)' | return "\<CR>:" . cmdline[0] . "jump  " . split(cmdline, " ")[1] . "\<S-Left>\<Left>"
        elseif cmdline =~ '\v\C^(cli|lli)' | return "\<CR>:silent " . repeat(cmdline[0], 2) . "\<Space>"
        elseif cmdline =~ '\C^changes' | set nomore | return "\<CR>:sil se more|norm! g;\<S-Left>"
        elseif cmdline =~ '\C^ju' | set nomore | return "\<CR>:sil se more|norm! \<C-o>\<S-Left>"
        elseif cmdline =~ '\C^ol' | set nomore | return "\<CR>:sil se more|e #<"
        elseif cmdline =~ '\C^undol' | return "\<CR>:u "
        elseif cmdline =~ '\C^ls' | return "\<CR>:b"
        elseif cmdline =~ '/#$' | return "\<CR>:"
        else | return "\<CR>" | endif
    else | return "\<CR>" | endif
endfunction

CCR


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

সর্বশেষ জিআইএফ প্রতীক ভিত্তিক নেভিগেশনের এক মাধ্যমটি দেখায় । উদাহরণটি বোকা তবে… ওহ ভাল।


আমি অনুমান করি যে আমি wild*বিকল্পগুলির সাথে যথেষ্ট খেলিনি , আমি এটি আমার উপায়ে টুইট করার চেষ্টা করব। ব্যারি আর্থার সমাধান সম্পর্কে এটি @ nobe4 এর উত্তরের কাছাকাছি যা আকর্ষণীয়। অবশেষে আমি আপনার CCR()ফাংশনটি সত্যই তা পেতে গভীরতর নজর নিতে হবে তবে এটি আশাব্যঞ্জক দেখায়। আপনার উত্তরের জন্য ধন্যবাদ.
স্ট্যাটক্স

5
আমার এই উত্তর দেখুন । বিশেষভাবে কমিক
রোমেনেল

আমি অবশ্যই এর কিছু চুরি করব!
স্ট্যাটক্স

7

কিছুক্ষণ আগেও আমি একই সমস্যার মুখোমুখি হয়েছি এবং এর সমাধান পেয়েছি:

nnoremap <leader>b :buffers<CR>:buffer<space>

এটি বাফার তালিকাটি খুলবে এবং এটিকে গোপন না করেই আপনাকে বাফারটি স্যুইচ করার বিকল্প দেয়।

আমি মনে করি যে এটি উপলব্ধি করে যে ভিমের এখানে "তালিকা এবং নির্বাচন" বিকল্প নেই, এটি দুটি পৃথক ক্রিয়া। তবে ভিম একসাথে কমান্ড একত্রিত করার পক্ষে যথেষ্ট শক্তিশালী।

এটি ইউনিক্স দর্শন হিসাবে ভাবেন: একটি কাজ করুন এবং এটি ভাল করুন।

:buffersবাফারগুলি তালিকাভুক্ত করে এবং :buffer xxxআপনাকে একটি নির্বাচন করতে দেয়।


1
আমার প্রশ্নে প্রস্তাবিত ফাংশনটি হালকা করার এটি একটি ভাল উপায়, আকর্ষণীয়!
স্ট্যাটক্স

1
আপনি যদি শেষে স্থানটি আরও দৃশ্যমান করতে চান তবে আপনি এটি করতে পারেন: nnoremap <leader> b: buffers <CR>: বাফার <স্পেস> |
টাইলার ডারডেন

1

কিছুক্ষণের জন্য আমি নোবে 4 এর কৌশলটি এভাবে ব্যবহার করেছি:

nnoremap <Leader>b :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

তারপরে আমি তা দিয়ে ট্যাব-সমাপ্তি ব্যবহার শুরু করেছি (রোমেনেলের পরামর্শ অনুসারে)

তবে খুব সাম্প্রতিকতম আমি ব্যবহার করা হ'ল কয়েকটি কী-স্ট্রোক সহ দ্রুততম পদ্ধতিটি পেয়েছি :

{count} CTRL-^

এটি এর থেকে আলাদা নয় :b#<Enter>তবে আপনি যেমন বলেছিলেন, আপনার বাফার নম্বরটি জানা দরকার !

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

অবশেষে, যেহেতু Ctrl-^আমার আঙ্গুলগুলির জন্য কিছুটা প্রসারিত, এবং এটি একটি খুব সাধারণ অপারেশন, তাই আমি এটিকে সরিয়ে নিয়েছি Ctrl-E। এর জন্য বাস্তবায়ন খুব জটিল নয়:

nnoremap <C-E> :<C-U>call SwitchToBuffer()<CR>

function! SwitchToBuffer()
  if v:count > 0
    exec v:count . "b"
    return
  endif

  " Whatever you want to do if you didn't provide a count
  " In this case, fall back to nobe4's technique:
  call feedkeys(":ls\n:b ")
endfunction

সুতরাং আমার বর্তমান বাফার স্যুইচিং প্রক্রিয়াটি এরকম কিছু হয়:

  1. মিনিবুফএক্সপ্লোরার দিকে তাকান
  2. হিট 3 Ctrl-E

দুঃখজনকভাবে এমবিই এবং উপরের স্ক্রিপ্টটি আপনার অনুরোধ অনুসারে ভিম বিল্টিন নয়। আমি যখন কোনও কনফিগারেশন ছাড়াই কোনও রিমোট মেশিনে থাকি তখন আমি কেবল ব্যবহার করি :b [partial]এবং ট্যাব-সমাপ্তি।

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