আপনি কীভাবে ভিমের অনুসন্ধানের মিলগুলি তালিকাভুক্ত করতে পারেন?


উত্তর:


3
    " put in your ~/.vimrc file
    " START search related configs and helps
    "
    " ignore case when searching
    set ignorecase

    " search as characters are entered, as you type in more characters, the search is refined
    set incsearch

    " highlight matches, in normal mode try typing * or even g* when cursor on string
    set hlsearch

    " yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline
    " how-to search for a string recursively
    " :grep! "\<doLogErrorMsg\>" . -r
    "
    " how-to search recursively , omit log and git files
    " :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`
    " :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'`
    "
    " how-to search for the "srch" from the current dir recursively in the shell
    " vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`'
    "
    " how-to highlight the after the search the searchable string
    " in normmal mode press g* when the cursor is on a matched string

    " how-to jump between the search matches - open the quick fix window by
    " :copen 22

    " how-to to close the quick fix window
    " :ccl

    " F5 will find the next occurrence after vimgrep
    map <F5> :cp!<CR>

    " F6 will find the previous occurrence after vimgrep
    map <F6> :cn!<CR>

    " F8 search for word under the cursor recursively , :copen , to close -> :ccl
    nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>

    " omit a dir from all searches to perform globally
    set wildignore+=**/node_modules/**

    " use perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/
    noremap / /\v
    "
    " STOP  search related configs and helps

1
আমি আপনার এফ 5-এফ 8 ধারণাটি পছন্দ করি। এখানে commands আদেশগুলির কিছু ভিজ্যুয়ালাইজেশন / আউটপুট পাওয়া ভাল লাগবে। F8 কীভাবে কাজ করার জন্য ডিজাইন করা হয়েছে? এটি কেবল বর্তমান ডিরেক্টরি অনুসন্ধান করে? - - একটি দির বাদ দেওয়া একটি রীতি - - কেন node_modules? - - পার্ল রেজেক্সগুলি কীভাবে ভিমের ডিফল্ট কার্যকারিতা পরিবর্তন করে? - - নিম্নলিখিতটি আমি কীভাবে আমার .tex ফাইলগুলির অনুসন্ধানের জন্য ডিজাইন করেছি Askubuntu.com/a/789769/25388 কীভাবে এটি উন্নত করবেন তা আপনার কাছ থেকে শিখতে ভালো লাগবে। এটি এতটা স্বজ্ঞাত নয় তাই আমি নিজেও প্রায়শই যুক্তিটি ভুলে গিয়েছিলাম।
লও লোপোল্ড হার্টজ 준영

নোড_মডিউলগুলি হ'ল এনপিএম মডিউলগুলি থেকে অনেকগুলি জেএস কোড সম্বলিত দির যদি আপনি সামনের প্রান্তগুলি বিকাশ করেন ... এটি কেবল একটি উদাহরণ ...
ইয়ার্ডান জর্জিভ

1
আপনার .vimrc এর ব্যাকআপ তৈরি করুন এবং সেটিংগুলি যুক্ত করুন, এগুলি লোড করুন: সুতরাং% এবং কমান্ডগুলিতে "সহায়তা" চালানোর চেষ্টা করার চেয়ে ... ভিআইএম কঠিন - আপনাকে এই কয়েক হাজার বার পুনরাবৃত্তি করতে হবে, তবে একবার আপনি তাদের মাস্টার করুন আপনি যারা হাসেন তাদের প্রত্যেককে যারা তাদের গ্রিডের নতুন ইউআই আইডিই বৈশিষ্ট্যগুলি নির্দেশ করে ...
ইয়ার্ডান জর্জিভ

226
:g//p

এর দীর্ঘ আকারে:

:global/regular-expression/print

আপনি প্যাটার্ন / রেজেক্সটি ছেড়ে দিতে পারেন এবং ভিম পূর্ববর্তী অনুসন্ধান শব্দটি আবার ব্যবহার করবে।

তুচ্ছ বস্তু: , grep টুল এই কমান্ড ক্রম পরে ঘোষণা করা হয়।


18
:g//- যেহেতু পি (রিন্ট) হ'ল ডিফল্ট ক্রিয়া, আপনি এটিও ছেড়ে দিতে পারেন।
dekeguard

6
:g/আরও খাটো!
স্পারহাক

2
গ্রেপ এর মতো এখানে কি প্রসঙ্গটি দেখা সম্ভব --context 9?
ভাইটালি জাদানেভিচ

@ ভিটিলিজেডেনেভিচ চেষ্টা করুন :%s/regular-expression//gn এটি এই লাইনের সাথে কিছু তৈরি করবে:X matches on Y lines
আলেকজ মাগুরা

@ আলেকজমগুরা আমার অর্থ - স্ট্রিংয়ের আগে এবং পরে কয়েকটি লাইন কীভাবে দেখবেন?
ভাইটালি জেডনেভিচ 12'17

50

আপনি এটিও করতে পারেন:

g/pattern/#

এটি আপনার চান নিদর্শন এবং লাইনের সংখ্যা মুদ্রণ করবে।


2
সুন্দর. তবে আপনার যদি ইতিমধ্যে লাইন নম্বরগুলি সক্ষম করা থাকে তবে #তার প্রয়োজন হয় না। এটি ডিফল্টরূপে লাইন সংখ্যাগুলি দেখায়
পবন মঞ্জুনাথ

44

আপনি যদি এই তালিকাটি দেখতে চান এবং ম্যাচের মধ্যে দ্রুত ঝাঁপিয়ে পড়তে চান তবে ব্যবহার বিবেচনা করুন

:vimgrep example %

অথবা

:grep example %

এই এত ম্যাচ সব "ত্রুটি তালিকা" পূরণ করবে আপনি ব্যবহার করতে পারেন :copenলিস্টে quickfix বাফারে তাদের সবাইকে, প্রেস ম্যাচের বা এগুলির মতো ব্যবহার কমান্ড ঝাঁপ একটি বিশেষ লাইনে লিখুন :cnএবং :cpআগে পিছে যান।

পুরো ব্যাখ্যা জন্য, একই প্রশ্নের আমার উত্তর দেখুন


এটি E499: Empty file name for '%' or '#', only works with ":p:h"ম্যাকভিম 8.1 এ দেয়
লিঙ্কন

35

সবেমাত্র একটি নতুন শিখেছে: দ্য Location List!
টাইপ করুন :lvim foo %জন্য অনুসন্ধান করতে fooবর্তমান ফাইলে এবং ধারণকারী সব ম্যাচ প্রবেশ fooমধ্যে অবস্থান তালিকা । কুইকফিক্স উইন্ডোতে অবস্থানের তালিকাটি খোলার জন্য
টাইপ করুন :lopen, যা যথারীতি পুরোপুরি নাব্য। তালিকাগুলির মাধ্যমে /
ব্যবহার করুন ( সেরা অভিজ্ঞতার জন্য টিপপ / আনপেইার্ড ম্যাপিং ব্যবহার করুন):lnext:lprevious


2
সুন্দর টিপ! এটি আমাকে এই ম্যাপিং তৈরি করতে পরিচালিত করেছে যা শব্দের সাথে কার্সারের অধীনে শব্দটি স্বয়ংক্রিয়ভাবে প্রসারিত হয় এবং একটি ঝাড়ুতে লোপেন: nnoremap <leader> f: lvim / <cr> = প্রসারিত ("<c>>") <cr> /% <cr>: lopen <cr>
জর্জেন

16

আর একটি সম্ভাবনা হ'ল অন্তর্ভুক্ত ফাইল অনুসন্ধান কমান্ডগুলি ব্যবহার করা।

[I

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

তবে এই কমান্ডটি সম্পর্কে দুর্দান্ত জিনিসটি হ'ল অনুসন্ধানের ফলাফলটি প্রতিটি ম্যাচের লাইন সংখ্যা ছাড়াও ম্যাচের সংখ্যার একটি সংখ্যাও দেখায়।

:help include-search

প্রচুর রূপ দেখতে।

সম্পর্কে একটি নোট

:g//p

এটি আরও কমানো যেতে পারে

:g//

কারণ, অন্যরা যেমন বলেছে, পি (রিন্ট) হ'ল ডিফল্ট ক্রিয়া।


[Iগ্রীপের মতো প্রসঙ্গেও ফলাফল পাওয়া সম্ভব --context 9?
ভাইটালি জেডনেভিচ

10

quickfixমিলগুলি আপনার বর্তমান অনুসন্ধানের ধরণটি তৈরি করে আপনি একটি দুর্দান্ত উইন্ডো পেতে পারেন

:vim // %
:copen

আপনি যদি ইতিপূর্বে একটি জটিল অনুসন্ধান প্যাটার্ন স্রেফ ব্যবহার করে তৈরি করেন তবে খুব কার্যকর /pattern

সম্পাদনা করুন : সন্ধান পেয়েছেন এটি সমস্ত ওপেন বাফারগুলির জন্যও কাজ করে

:bufdo vimgrepadd // %
:copen

10

ব্যবহারের :set hlsearchফলে হলুদ রঙের সমস্ত ম্যাচ হাইলাইট হবে যা আপনাকে ম্যাচের জন্য সহজেই ফাইল স্ক্যান করতে দেয়। অনুসন্ধানের পরে, আপনি যা চান তা এটি নাও হতে পারে: g // পি আপনাকে তালিকাভুক্ত ম্যাচগুলি দেবে


2
': Hlsearch সেট করা উচিত' নয় ': hlsearch' হওয়া উচিত।
খুব বেশি পিএইচপি

:nohlআপনার যখন আর প্রয়োজন নেই তখন হাইলাইটগুলি সাফ করার জন্য ম্যাপ করাও কার্যকর ।
কোস

9

এর পরিবর্তে ... এর বিস্তারিত ব্যাখ্যা করা

/example
:g//p

আপনি সরাসরি লিখতে পারেন

:g/example/p

বা, যেমন পি (রিন্ট) হ'ল: জি (লোবাল) কমান্ডের জন্য ডিফল্ট ক্রিয়া, এটি এটিকে ছোট করা যেতে পারে

:g/example

এবং পি (রিন্ট) এর পরিবর্তে অন্যান্য ক্রিয়াকলাপগুলি সম্ভব, যেমন ডি (একাদশ)। দেখুন: সহায়তা: গ্লোবাল


6
g/pattern

আপনার যদি থাকে :set numberতবে উপরের কমান্ডটি লাইন নম্বরগুলিও প্রদর্শন করে।

যদি না থাকে :set numberতবে

g/pattern/#

লাইন নম্বর প্রদর্শন করবে।


0

আমি এই জন্য কোড টুকরা লিখেছি। এটি আসলে সমস্যাগুলি এড়িয়ে চলে vimgrep। এটি নামবিহীন ফাইলগুলির সাথেও কাজ করে। এবং এটি ব্যবহার করা সহজ।

function! Matches(pat)
    let buffer=bufnr("") "current buffer number
    let b:lines=[]
    execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
    call setloclist(0, [], ' ', {'items': b:lines}) 
    lopen
endfunction

আপনি যখন এটিকে কোনও প্যাটার্নের সাথে কল করবেন তখন এটি সমস্ত মিলগুলির সাথে অবস্থান উইন্ডোটি খুলবে।

এটি একটি আদেশ হতে পারে

command! -nargs=1 Mat call Matches(<f-args>)

সুতরাং আপনাকে যা করতে হবে তা হ'ল টাইপ করা :Mat pattern

আমি বর্তমান ভিজ্যুয়াল নির্বাচনের ম্যাচগুলি পেতে নিম্নলিখিত ম্যাপিংটিও ব্যবহার করি।

vnoremap Y "xy:call Matches(@x)<CR>

-1

সমস্ত অনুসন্ধান ফলাফলের তালিকা করতে Ctrl-f:

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.