কেবল মিলে যাওয়া লাইনগুলি দেখান?


31

একটি দীর্ঘ ফাইলে, আমি এমন একটি প্যাটার্নটি অনুসন্ধান করতে চাই যা প্রায় 200 লাইন বা তার সাথে মিলবে। ম্যাচ করা লাইনগুলি ফাইলের এলোমেলো জায়গায় রয়েছে।
যখন একটি লাইন মেলে, কেবল লাইনটি নিজেই প্রাসঙ্গিক, উপরে বা নীচে কোনও প্রসঙ্গ নেই।

সাধারণত, আমি অনুসন্ধান করে /এবং সাথে ম্যাচগুলিতে ঝাঁপিয়ে পড়তাম n
তবে এর মানে হল যে পর্দায় এক সাথে কেবল দুটি বা দুটি প্রাসঙ্গিক লাইন রয়েছে।

ফলাফলের রেখার তালিকার মধ্য দিয়ে যাওয়ার সময় মেলে না এমন সমস্ত লাইনগুলি লুকানোর কোনও উপায় কি?


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

উত্তর:


34
:vimgrep pattern %
:cwin

vimgrepবর্তমান ফাইল ( %) বা আপনার নির্দিষ্ট করা ফাইলগুলিতে আপনার প্যাটার্নটি অনুসন্ধান করবে ।

cwinতারপরে আপনার উইন্ডোতে এমন একটি বাফার খুলবে যা কেবলমাত্র পছন্দসই লাইনগুলি দেখায়। আপনি cwinবাফারের মধ্যে কোনও নেভিগেট / অনুসন্ধান কমান্ড ব্যবহার করতে পারেন । সোর্স ফাইলে আপনার কার্সারের নীচে লাইনে ঝাঁপিয়ে ফিরুন টিপুন।


1
:vimgrepসংক্ষেপে বলা যেতে পারে:vim
ডি বেন নোবেল

আমি আবার কিভাবে বাফারে ফিরে যেতে পারি?
পাশা

এছাড়াও আমি বাফারটি কীভাবে বন্ধ করব? অগ্রিম ধন্যবাদ
পাশা

কুইকফিক্স (সিওয়াইন্ডো) বাফার থেকে আপনি যে কোনও লাইনে রিটার্নটি হিট করতে পারেন মূল বাফারের সেই জায়গায় যেতে। আপনি উইন্ডো বাফারটি যে কোনও জায়গা থেকে বন্ধ করতে পারেন :ccl[ose]বা তবে আপনি সাধারণত একটি বাফার বন্ধ করে (যেমন, এটিতে স্যুইচ করুন এবং :bd)। আপনি :cw[indow]আবার দৌড়ে কুইকফিক্স বাফারটি আবার খুলতে পারেন , এবং এটি আপনার শেষ ভিমগ্রিপ ফলাফল ব্যবহার করবে।
জ্যাচ ইঞ্জব্রেটসেন

15

আপনি এর সাথে সমস্ত মিলে যাওয়া লাইন তালিকাভুক্ত করতে পারেন

:g/{pattern}

( :printআদেশটি বাদ দেওয়া যেতে পারে; এটি এর জন্য ডিফল্ট :g)


1
এটি "আসল গ্রেপ" ( g/REgexp/p) ... সমস্যাটি হ'ল আপনি সহজেই ম্যাচের একটিতে লাফিয়ে
উঠতে

@ কার্পেটস্মোকার: আপনি ঠিক বলেছেন; তার জন্য, আমার একটি প্লাগইন রয়েছে, আমার অন্য উত্তরটি দেখুন।
ইনগো কারকাত

এটি অনেক ক্ষেত্রে কার্যকর হতে পারে। আউটপুটটি কি নতুন বাফারকে পুনঃনির্দেশিত করা যেতে পারে? এটি এখনও লাইনে সিনট্যাক্স হাইলাইট করার অনুমতি দেয়। (হুম ... এটি আরও একটি প্রশ্ন উত্থাপন করে, একটি দ্বিতীয় অপেক্ষা করুন ...)
ভলকার সিগেল

@ ইঙ্গোকার্কাত- এর অর্থ কী g। আমি ধরে নিলাম যে এটি একটি বিশ্বব্যাপী। আমি সাধারণত একটি স্ল্যাশ সহ ষষ্ঠ অনুসন্ধান করি /patternএবং এটি সমস্ত উপস্থিতি খুঁজে পেতে পারে। চিঠিটি টিপে কেউ তাদের কাছে চলাচল করতে পারেn
আলেকজান্ডার সিএসকা

@ আলেকজান্ডারসস্কা: না, এটি অনুসন্ধানের জন্য কোনও পরিবর্তনকারী নয়, একটি পৃথক কমান্ড :g[lobal]যা আর্গুমেন্ট হিসাবে একটি নিদর্শন গ্রহণ করে। আপনি এখানে সমস্ত বিবরণ পাবেন :help :global
ইনগো কারকাত

12

অপ্রাসঙ্গিক লাইনগুলি ভাঁজ করতে আপনি foldmethodএবং foldexprবিকল্পগুলি ব্যবহার করতে পারেন ।

অনুসন্ধানের পরে, সর্বশেষ অনুসন্ধানটি @/রেজিস্টারে সংরক্ষণ করা হয় । সুতরাং, আপনি এর মতো মেলে না এমন সবকিছু সহজেই ভাঁজ করতে পারেন (কেবলমাত্র এক-লাইন ম্যাচের জন্য):

:setlocal foldexpr=getline(v:lnum)=~@/?0:1 foldmethod=expr

আরো উন্নত পদ্ধতি, প্রসঙ্গ লাইন আপনি দেখাতে পারেন বা লুকিয়ে রাখবেন, অথবা একাধিক লাইনের মিলে, পাওয়া যাবে জন্য ভাঁজ একাধিক মাত্রা যুক্ত করার মত তেজ টিপস উইকি


মনে হচ্ছে set foldlevel=0দরকার আছে? তবে সম্ভবত এটি ডিফল্ট।
ভোলকার সিগেল

1
হ্যাঁ ডিফল্টটি শূন্য, তবে এটি ছাড়া কাজ না হলে এটি ক্ষতি করতে পারে না। :-)
বেন

তবে এখন ... কোনও চিহ্ন ছাড়াই কীভাবে এটি আবার সরিয়ে নেওয়া যায়?
ভোলকার সিগেল

সাধারণ মোডে, আপনি ভাঁজ বন্ধ এবং চালু করতে 'zi' ব্যবহার করতে পারেন।
জন ও'ম।

বেশিরভাগ সময় আমি যখন এটি করি তখন আমি প্রথমে :tab spফাইলে একটি নতুন থ্রোওয়ে ভিউ পাই। তারপরে ফিরে যাওয়া :closeট্যাবটি মারার মতো সহজ বা অন্য কোনও উপায়।
বেন

6

যদি অর্ডারটি কোনও ব্যাপার না হয় তবে কেবল লাইনগুলি সরান।

:g/pat/m0

আরও সহায়তার জন্য দেখুন:

:h :g
:h :m

1
এবং :g/pat/m$(মিলিত রেখাগুলি শেষ পর্যন্ত সরিয়ে নেওয়াও) ঠিক আছে,
লারনার জাং

6

[d] একত্রিত সমস্ত পংক্তির (!) মেলে না

:g!/pattern/d

বা এমনকি সহজ ('বি লেয়ার' দ্বারা দেওয়া মন্তব্যের জন্য ধন্যবাদ):

:v/pattern/d

হ্যাঁ, তবে এর :vচেয়ে সমতুল্য ব্যবহার করা আরও প্রচলিত :g!। (আমি শেষেরটি টিবিএইচটি ব্যবহারের শেষ সময়টি মনে করি না!)
বি লেয়ার

2

আপনি যদি সমস্ত মিলে যাওয়া লাইনগুলি (আমার অন্যান্য উত্তরের মতো) তালিকাভুক্ত করতে চান এবং তারপরে একটি নির্দিষ্ট ম্যাচে ঝাঁপ দেন তবে আমার ফাইন্ডঅ্যাক্সিয়েন্স প্লাগইনটি এর জন্য একটি [/ম্যাপিং সরবরাহ করে (এবং [nকোনও অনুসন্ধানের পরিবর্তে শেষ অনুসন্ধানের প্যাটার্নের জন্য)। [/patternতালিকাগুলি পছন্দ করে :g/patternতবে তারপরে ম্যাচে নামার সংখ্যাটি জিজ্ঞাসা করে।


0

আর একটি উপায় হ'ল ব্যবহার করা :h :ilist, আমি ম্যান পৃষ্ঠার ওভারভিউ পেতে এটি ব্যবহার করি। এটির ফলাফলটি এরকম দেখাচ্ছে:

~/find.~
  1:    3 NAME
  2:    6 SYNOPSIS
  3:    9 DESCRIPTION
  4:   18 OPTIONS
  5:   93 EXPRESSION
  6:  779 EXAMPLES
  7:  877 HISTORY
  8:  931 BUGS

এখানে একটি ছোট ফাংশন যা আপনাকে সূচী অনুসারে ফলাফলের লাইনে যেতে পছন্দ করে:

function! s:select_ilist(ilist_result)
  if empty(a:ilist_result) || a:ilist_result =~# '^\_s*Error'
    return
  endif

  let select = input(a:ilist_result . "\ngoto : ")
  if empty(select) | return | endif

  " ilist result starts with '\nfilename\n', filename can be empty
  let lines = split(a:ilist_result[stridx(a:ilist_result, "\n", 1) : ], "\n")
  if select <= 0 || select > len(lines) | return | endif

  exec matchstr(lines[select-1], '^\v\s*\d+\:\s+\zs\d+')
endfunction

এটি এর মতো ব্যবহার করা যেতে পারে:

command! -buffer Section call s:select_ilist(execute('silent! ilist /\v\C^[A-Z][^a-z]+$/'))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.