আমি কীভাবে শব্দের প্রতিটি সংঘে কীস্ট্রোকের সেট প্রয়োগ করব?


13

আমি যদি প্রতিটি শব্দ মুছতে চাই, তবে এটি সহজ, কারণ আমি এই জাতীয় কিছু করব:

:s%/WORD//g

তবে আমি যদি xyz"WORD" এর প্রতিটি ঘটনাকে করতে চাই ? উদাহরণস্বরূপ, ধরা যাক যে আমি "ডাব্লুআরআর" থাকা প্রতিটি লাইন মুছতে চাই। আমি এটি করার কয়েকটি উপায় সম্পর্কে ভাবতে পারি তবে এগুলির কোনওটিই আদর্শ বলে মনে হয় না।

1)

/WORD

এবং তারপরে ddnddnddnddn...আর কোনও ঘটনা উপস্থিত না হওয়া পর্যন্ত ম্যানুয়ালি টিপুন । এটি করার জন্য অনেক লাইন থাকলে এটি এখন সময়সাপেক্ষ।

2)

qd/WORD<enter>ddq

এবং তারপরে অনুমান করুন যে ওয়ার্ডটি কতবার ঘটে এবং তারপরে উদাহরণস্বরূপ:

500@d 

তবে এটি হয় ক) একগুচ্ছ রেখাগুলি বা খ) মিস করবে অতিরিক্ত লাইনগুলির গুচ্ছ মুছবে।

এই কাজ করতে একটি ভাল উপায় আছে কি?


3
ঠিক তেমনি আপনি জানেন, 500@dআপনি বর্ণনা হিসাবে বাস্তবে নিরাপদ। একবার অনুসন্ধান শব্দটি পাওয়া না গেলে ম্যাক্রো প্লেব্যাক বন্ধ হয়ে যাবে। সুতরাং আপনি কেবল একটি ত্রুটি দেখতে পাবেন "প্যাটার্নটি পাওয়া যায়নি: ডাব্লুএইচআরডি" এতে থাকা সমস্ত লাইন মুছে ফেলার পরে।
ওয়াইল্ডকার্ড

@ উইলকার্ড থানকিউ, এটি জানতে পেরে সত্যিই ভাল!
জেমস

উত্তর:


17

আপনি এর জন্য :globalএবং :normalকমান্ডগুলি ব্যবহার করতে পারেন । :globalকমান্ড অনুসরণ সিনট্যাক্স রয়েছে:

:global/{pattern}/{command}

এটি "প্যাটার্ন" এর প্রতিটি ঘটনায় "কমান্ড" চালাবে। তারপরে আপনি :normalকমান্ডটি ব্যবহার করে কোনও শব্দের প্রতিটি ঘটনার জন্য কীস্ট্রোকের একটি সিরিজ চালাতে পারেন :global। তাই ভালো:

:g/WORD/normal {keystrokes}

যদি এই কী-স্ট্রোকগুলিতে বিশেষ কীগুলি জড়িত থাকে তবে <Ctrl>আপনি এটি :executeকমান্ডের সাথে একত্রিত করতে পারেন :

:g/WORD/exe "normal {keystrokes}"

মনে রাখবেন যে একটি বিশেষ কী এর প্রতিটি ঘটনার আগে আপনাকে অবশ্যই একটি ব্যাকস্ল্যাশ রাখতে হবে।

এই আদেশগুলি সম্পর্কে আরও তথ্যের জন্য, দেখুন :help :normalএবং :help :global


আমাকে মারো; আমার ধারণা আমি টাইপটি খুব ধীর করেছিলাম। :)
ওয়াইল্ডকার্ড

3

কেবল সম্পূর্ণতার জন্য, আপনি যদি মিলেন :substituteতবে আপনি এটি ব্যবহার করতে পারেন - উদাহরণস্বরূপ (ডাব্লুআরআরড রয়েছে এমন সম্পূর্ণ লাইনটি মুছুন) - ডাব্লুআরএড যুক্ত সম্পূর্ণ লাইন , যেমন:

:%s/^.*\<WORD\>.*\n

এটিতে একটি অন্তর্নিহিত "কিছুই না দিয়ে প্রতিস্থাপন ম্যাচ" রয়েছে, এটি এটির সংক্ষিপ্ত রূপ:

:%s/^.*\<WORD\>.*\n//

সাথে মিলিত \zs, \ze, \(- \)(গোষ্ঠীবদ্ধ), এবং \=সঙ্গে (প্রতিস্থাপন অংশ মধ্যে) submatch(), :substituteখুব শক্তিশালী হতে পারে।


2

এটা আপনার জন্য খুঁজছি হয় বলে মনে হয় :global

:g/WORD/d_

আন্ডারস্কোর কী করে?
ওয়াইল্ডকার্ড

এটি কাজ করে, তবে আমি জানি এমন কোনও আদেশই কাজ করে না। আমি "সম্পাদক কমান্ড নয়" পেতে থাকি।
জেমস

1
@ উইল্ডকার্ড: আন্ডারস্কোরটি যা কাটা হচ্ছে তা ছাড়ছে। কার্যকর করা কমান্ডটি আসলে :deleteএবং সাধারণ মোড অপারেশন নয় d
লুক হার্মিট

@ ডিজেএমসিএমহেম: অন্যান্য সাধারণ ক্রিয়াকলাপগুলির জন্য আপনার প্রয়োজন হবে :normal। এবং যদি আপনার বিশেষ কীগুলির প্রয়োজন হয় তবে আপনার এমনকি প্রয়োজন হতে পারে :exe-> `exe" স্বাভাবিক aFooFar \ <esc> "
লুক হার্মিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.