কোনও ফাইলের মধ্যে শব্দের সংখ্যার সংখ্যা গণনা করার কোনও উপায় আছে কি?


68

কোনও ফাইল বা শব্দ বা প্যাটার্নটি কতবার প্রদর্শিত হয় তা গণনা করা সম্ভব? কোনও ফাংশনটি কতবার ডাকা হয়েছে ইত্যাদি এটি অনুসন্ধান করার জন্য এটি কখনও কখনও দরকারী etc.


উত্তর:


93

কুইনসির উত্তরটি ভাল, তবে এটি করার একটি সঠিক উপায় রয়েছে যার জন্য বাফার সম্পাদনা করার প্রয়োজন নেই:

:%s/pattern//ng

এটি এমন বার্তা প্রিন্ট করবে 3 matches on 2 linesএবং আপনার বাফারে কোনও পরিবর্তন করা হবে না।

nপতাকা তোলে :substituteকমান্ড পরিবর্তে ম্যাচ সংখ্যা প্রিন্ট প্রকৃত প্রতিকল্পন করণ এর; gপতাকা প্রতি লাইনে একাধিক মিল প্রতিবেদন দেয়।


আপনার ব্যবহারের ক্ষেত্রে কার্যকর হতে পারে এমন আরেকটি জিনিস হ'ল কোনও প্যাটার্নের সাথে মেলে এমন সমস্ত লাইন মুদ্রণ করা:

:global/pattern/print

যা সংক্ষিপ্ত করা যেতে পারে:

:g/pattern

এটি :globalকমান্ডের অন্যতম সহজ ব্যবহার (যা মন-দমিয়ে রাখা শক্তিশালী)। এটি কেবল মেলে এমন সমস্ত লাইন মুদ্রণ করবে patternএবং তারপরে (যদি একাধিক লাইনের সাথে থাকে) আপনি চাপতে Enterবা অন্য কমান্ডটি টাইপ করে এটিকে দূরে সরিয়ে দেয়।

কিছুটা ট্রিভিয়া: এই আদেশটি হ'ল নামটির মূল grep, কারণ এটি সাধারণত হিসাবে বর্ণিত হয় g/re/p, যেখানে re"নিয়মিত অভিব্যক্তি" বোঝানো হয়।


2
+1 এটি একটি দুর্দান্ত উত্তর, স্পটে অন স্পট এবং একই সাথে যুক্তিযুক্ত বিশদ। আসুন আশা করি বেশিরভাগ প্রশ্নের উত্তর পাওয়া যায়! :)
yo '

দুর্দান্ত উত্তর এবং আশ্চর্যজনক ট্রিভিয়া!
বিবি

আমাকে এটি সম্ভবত বছরে 2-3 বার করতে হবে এবং সিনট্যাক্সটি কখনই মনে করতে পারে না এটি প্রতিবার অনুসন্ধান মেশিনের মতো to এই স্পষ্ট উত্তরের জন্য আপনাকে ধন্যবাদ জানাতে চেয়েছিলাম কারণ এটি আমার জন্য একাধিকবার ছিল এবং এখন কয়েক বছর ধরে আমাকে সেই বেদনাদায়ক উইকিয়া পৃষ্ঠাটি বাঁচিয়েছে! (উইকিয়া না পৃষ্ঠার বিষয়বস্তু)
উইল

1
মাইনর বিট: কমান্ডটি g/re/pআসলে এসেছে ed, নয় vi। গ্রেপ কয়েক বছরের মধ্যে vi এর পূর্বাভাস দেয়।
উইল

আমার একটা nnoremap <leader>n :%s///gn<CR>ম্যাপিং আছে সুতরাং আমি <leader>nপূর্বে অনুসন্ধান করা প্যাটার্নটির উপস্থিতিগুলি গণনা করতে টিপুন । আমি প্রায়ই এটি আশ্চর্যজনকভাবে ব্যবহার করি use
ल्फ

15

:%s/pattern//nnশেষ পতাকা বলে :sকমান্ড ম্যাচ সংখ্যা প্রতিবেদন করতে এবং আসলে প্রতিস্থাপন না। :h :s_flagsবিস্তারিত জানতে পড়ুন ।


4
তাই না gn?
ইয়ো '

1
@ 'হ্যাঁ, জি যদিও অন্য একটি পতাকা, আপনি gযদি মনে করেন যে লাইন প্রতি একাধিক ম্যাচ থাকতে পারে, যা প্রায়শই সত্য। প্রশ্নের প্রয়োজনে তবে পতাকাটি nআরও গুরুত্বপূর্ণ।
ধ্রুব সাগর

5

প্রথমে /একটি রেজেক্স অনুসন্ধান করার জন্য প্রথমে ব্যবহার করুন

:%s///gn

এটি ধূর্বর জবাবের সমান, এটি বাদে ক।) ব্যবহার করা সহজ (যেহেতু আপনার রেজেক্স প্রথমে কী মিলছে তার ফলাফলগুলি আপনি পূর্বরূপ দেখতে পারেন) এবং খ।) সমস্ত উপস্থিতি gগণনা করার জন্য বিশ্বব্যাপী পতাকাটির সাথে মিল রয়েছে ।


3

এই পিআর https://github.com/vim/vim/pull/4317 কে ধন্যবাদ , প্রতিটি অনুসন্ধান কমান্ড অনুসন্ধানের পরিসংখ্যানগুলি (বর্তমান ম্যাচের অবস্থানের মতো, এবং ম্যাচের সংখ্যার মতো) ভিএম 8.1.1270 তে দেখায়। Sপরিবর্তনশীল থেকে অপসারণ নিশ্চিত করুন shortmess


2

:%s/pattern//g

আপনি স্ট্যাটাস বারে বিকল্পের সংখ্যা দেখতে পাবেন। এভাবেই বহুবার patternউপস্থিত হয়। তারপরে কেবল uবিকল্পগুলি পূর্বাবস্থায় ফিরিয়ে আনতে টিপুন ।


1

আমি এখানে উত্তরগুলির উপর ভিত্তি করে আমার .vimrc এ একটি ম্যাপিং যুক্ত করেছি:

" count nr of occurrences of word under cursor
nnoremap <leader>c :%s/<c-r><c-w>//gn<cr>

" count nr of occurrences of visual selection
vnoremap <leader>c :<c-u>%s/<c-r>*//gn<cr>

কিছুটা ব্যাখ্যা, আশা করি নতুন ভিমারদের জন্য সহায়ক:

  • <c-r><c-w> কমান্ড লাইনে কার্সারের নীচে শব্দটি সন্নিবেশ করানো হয়েছে, অনেক ক্ষেত্রে ব্যবহারযোগ্য।

  • <c-u>মুছে ফেলার জন্য স্বয়ংক্রিয়ভাবে সন্নিবেশিত প্রয়োজন হয় '<,'> যখন টিপে :চাক্ষুষ মোডে কমান্ড লাইন যাচ্ছে। *রেজিস্টার, (শেষ) চাক্ষুষ নির্বাচন রয়েছে <c-r>* বিষয়বস্তু সন্নিবেশ *(এছাড়াও সন্নিবেশ মোডে ব্যবহার করা যেতে পারে) কমান্ড লাইনে রেজিস্টার।

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