ভিআইএম - লাইন গণনা না করে পাঠ্যের একটি বৃহত ব্লক কীভাবে মুছবেন?


193

ভিমে, আমি প্রায়শই নিজেকে বড় আকারের পাঠ্য মুছে ফেলা (বা অনুলিপি করতে) দেখতে পাই। পাঠ্যের রেখাগুলি গণনা করতে পারেন এবং 50dd50 টি লাইন মুছতে (উদাহরণস্বরূপ) বলতে পারেন can

তবে কেউ কীভাবে এই লাইনটি মুছে ফেলতে হবে তা জানতে না পেরে এই বৃহত ব্লকটিকে কীভাবে মুছবেন?


1
উইন্ডোটি যথেষ্ট বড় হলে আপেক্ষিক লাইন নম্বর এখানে সহায়ক number উইন্ডোটির শীর্ষে কার্সারটি রাখুন, মোছার জন্য শেষ লাইনের আপেক্ষিক লাইন নম্বরটি সন্ধান করুন (বলুন, এন), একটি যুক্ত করুন, তারপরে সেই নম্বরটি টাইপ করুন, তারপরে ডিডি টাইপ করুন। উদাহরণস্বরূপ যদি এন = 50, তবে 51dd। বিকল্পভাবে, একটি মোশন কমান্ডটি ব্যবহার করুন -50d<down arrow>
BallPointBen

"আপেক্ষিক লাইন নম্বরটি সন্ধান করুন" - অথবা, ব্যবহার করুন :set rnuএবং ভিম তাত্ক্ষণিকভাবে এটি করবে! আপনি যে রেখাটিতে রয়েছেন তা এখনও পুরোপুরি গণনা করা হবে তবে কার্সরের উপরে এবং নীচের লাইনগুলিকে প্রতিসাম্যিকভাবে 1, 2, ... গণনা করা হবে ... (এবং কার্সার আন্দোলন, ফাইল-স্তরের ইভেন্টগুলি ইত্যাদির সাথে আপডেট করুন)
জন পি

উত্তর:


287

আমি কোনও ভিম ​​গুরু নই, তবে এই পরিস্থিতিতে আমি যা ব্যবহার করি তা হ'ল "ভিজ্যুয়াল মোড"। কমান্ড মোডে, টাইপ করুন V(মূলধন)। তারপরে আপনি যে ব্লকটি মুছে ফেলতে চান তা হাইলাইট করতে উপরে / নীচে সরান (সমস্ত সাধারণ আন্দোলনের আদেশগুলি কাজ করে)। তারপরে xবা দিয়ে এটি সরিয়ে দিন d


2
স্ট্রেঞ্জ। আমি জানি এটি আমার জন্য লিনাক্স (ভিএম 7.3.50) এবং উইন্ডোজটিতে জিভিম সহ ওয়ার্কস ফর (টিএম) করে। এবং অন্যান্য উত্তরগুলির দ্বারা বিচার করা, অন্য লোকের পক্ষে কাজ করে। আপনার কিছু সেটিংস .vimrcএটি কার্যকর করে তুলছে?
মাদুর

ঠিক আছে, কোনও কারণে আমি বুঝতে পারি নি যে আপনি ব্যবহার করে ভিজ্যুয়াল লাইন মোডে প্রবেশ করতে পারেন Shift- v... আমি কীটিও ব্যবহার করার চেষ্টা করছিলাম CTRL। সুতরাং এটি কাজ করে এবং সম্ভবত সবচেয়ে সুবিধাজনক উপায়।
জাস্টিন ইথিয়র

7
আপনি স্পষ্ট করতে চাইতে পারেন যে দুটি ভিজ্যুয়াল মোড রয়েছে - ভিজ্যুয়াল লাইন ( CTRL- v) এবং ভিজ্যুয়াল ব্লক ( Shift- v)।
জাস্টিন ইথিয়ার

2
আমি এটা অনেক কিছু। তবে আমি সর্বদা এটিকে প্রতারণা এবং আদর্শের চেয়ে কম আদর্শ মনে করি।
জিম মিচিটনার

9
প্রকৃতপক্ষে তিনটি ভিজ্যুয়াল মোড রয়েছে: ভিজ্যুয়াল মোড (ক্যারেক্টার ভিত্তিক {v}), ভিজ্যুয়াল লাইন মোড (লাইন ভিত্তিক} এসভি}) এবং ভিজ্যুয়াল ব্লক মোড (ব্লকগুলি নির্বাচন করার অনুমতি দেয় v সিভি})
টম রেগনার

293

প্রারম্ভিক লাইনে গিয়ে টাইপ করুন ma("একটি" চিহ্নিত করুন)। তারপরে শেষ লাইনে যান এবং প্রবেশ করুন d'a("একটি" চিহ্নিত করতে মুছুন)।

এটি বর্তমান থেকে চিহ্নিত চিহ্নিত (সমেত) সমস্ত লাইন মুছে ফেলবে। এটি আপনার viপাশাপাশি vimপরিবেশের আশীর্বাদ না হওয়ার অফ অফ সুযোগে এটিও উপযুক্ত compatible


3
এই শৌখিন পাথর! আমি আরও ভাল সমাধানের দিকে যাবার আগে আমি কতক্ষণ কেবল কিছু করি (লাইন গণনা করার মতো) ঘৃণা করি। ধন্যবাদ!
ryanjdillon

1
সত্যিই দারুণ আমি ব্লকটি মুছে ফেলার জন্য ভিজ্যুয়াল মোডটি সবসময় ব্যবহার করি তবে এই
উপায়টি

4
500 কে + লাইন মুছে ফেলার জন্য আমি ভিজ্যুয়াল মোডের চেয়ে এটি আরও সহায়ক বলে মনে করেছি
মাইকেল - ক্লে শিরকি

সত্যিই বাস্তব উত্তর। আমি এটিকে আমার সার্ভারের মেইলগুলি /var/mail/usernameবাল্ক থেকে ফাইল থেকে মুছতে এবং শেষ মেলগুলি অক্ষত রেখে দিতে ব্যবহার করি use আমি একটি চিহ্ন করি, তারপরে আমি 50.000 লাইনে যাওয়ার 50000পরে উদাহরণস্বরূপ প্রবেশ করি gg, তারপরে আমি সমস্ত লাইনটি এর মধ্যেই মুছব। একটি যাদুমন্ত্র মত কাজ করে!
otmezger

1
@ হর্টা, আমি সম্ভবত vimগিগাবাইট ফাইল সম্পাদনা করার সরঞ্জাম হিসাবে ব্যবহার করব না - আমি পাঠ্য প্রক্রিয়াজাতকরণ সরঞ্জামগুলি awkএবং তার ভাইদের পছন্দ করতে পছন্দ করতাম :-)
প্যাক্সিডাব্লো

46

এছাড়াও আপনি চাক্ষুষ মোড ব্যবহার করতে পারেন (কিছু কমান্ড মুছে বিকল্প ব্যবহারযোগ্য হয়) vip vapঅনুচ্ছেদ নির্বাচন করতে, v2apদুই অনুচ্ছেদ নির্বাচন করতে dapকাজ, d2apএছাড়াও। আপনি পছন্দসই ব্লকগুলির মধ্যে মুছতে [ ]পারেনda[

রেফারেন্সের জন্য: অবজেক্টের ধরণ। ভিএম ডকুমেন্টেশন থেকে: বিভাগ 4। Http://vimdoc.sourceforge.net/htmldoc/visual.html

4. Operating on the Visual area             *visual-operators*

...    
The objects that can be used are:
aw  a word (with white space)           
iw  inner word                  
aW  a WORD (with white space)           
iW  inner WORD                  
as  a sentence (with white space)           
is  inner sentence                  
ap  a paragraph (with white space)          
ip  inner paragraph                 
ab  a () block (with parenthesis)           
ib  inner () block                  
aB  a {} block (with braces)            
iB  inner {} block                  
a<  a <> block (with <>)                
i<  inner <> block                  
a[  a [] block (with [])                
i[  inner [] block                  

1
দা [, দা {, দা "প্রোগ্রামারদের জন্য সমস্ত দরকারী
রিনি উলার

1
ধন্যবাদ! dap"অনুচ্ছেদ মুছুন" হিসাবে মনে রাখা খুব সহজ
ট্রপিলিও

38

এখানে আরও অনেক ভাল উত্তর রয়েছে, তবে সম্পূর্ণতার জন্য আমি উপরে উল্লিখিত দুর্দান্ত উত্তরগুলি পড়ার আগে আমি যে পদ্ধতিটি ব্যবহার করেছি তা উল্লেখ করব।

মনে করুন আপনি 24-39 লাইন থেকে মুছতে চান। আপনি প্রাক্তন কমান্ড ব্যবহার করতে পারেন

:24,39d

আপনি লাইনগুলি ব্যবহার করে ইঙ্কও করতে পারেন

:24,39y

এবং 24-39 লাইন ব্যবহার করে সন্ধান করুন এবং প্রতিস্থাপন করুন

:24,39s/find/replace/g

11

আপনি যদি লাইন নম্বরগুলি চালু করেন তবে আপনি যা set numberকরতে পারেন dNNGতা বর্তমান অবস্থান থেকে এনএন রেখায় মুছে ফেলবে। সুতরাং আপনি মুছে ফেলতে চান সেই লাইনের শুরুতে নেভিগেট করতে পারেন এবং কেবল আপনি মুছে ফেলতে চান d50Gএটিই শেষ লাইন।


10

এটি ধরণের যে বৃহত ব্লক কি উপর নির্ভর করে । হতে পারে আপনি কেবল একটি অনুচ্ছেদ মুছে ফেলার অর্থ যা কোনও ক্ষেত্রে একটি dipকরবে।


বখশিশের জন্য ধন্যবাদ. দুর্ভাগ্যক্রমে আমি এখানে কোড নিয়ে কাজ করছি এবং সাধারণত এর চেয়ে আরও সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন।
জাস্টিন ইথিয়ার

1
আমি কোড নিয়েও কাজ করছি, এবং আমি একটি খালি লাইনে লজিকাল ব্লকগুলি পৃথক করি। এই টিপটি সবেমাত্র আমার দিন তৈরি করেছে। আমি এখন তিনটি কীস্ট্রোক দিয়ে যুক্তির বৃহত ব্লকগুলি মুছতে পারি।
মিনিমল

এটি কাজ করে কারণ 'ডি' এর অর্থ মুছে ফেলা, এই প্রসঙ্গে 'পি' এর অর্থ অনুচ্ছেদ
ব্যবহারকারী98761

7

বেশ কয়েকটি সম্ভাবনা রয়েছে, আপনি যে পাঠ্যটিতে কাজ করছেন তার উপরে সবচেয়ে ভাল নির্ভর করে।

দুটি সম্ভাবনা মাথায় আসে:

  • ভিজ্যুয়াল মোডে স্যুইচ করুন ( V,, S-V...), কার্সার মুভমেন্ট সহ টেক্সটটি নির্বাচন করুন এবং টিপুনd
  • এর সাথে একটি সম্পূর্ণ অনুচ্ছেদ মুছুন: dap

আমি এখন প্রায়শই ড্যাপ ব্যবহার করি যেহেতু আমি এটি সম্পর্কে জানি এবং এটি ডিস এবং ডুবতে পছন্দ করি তবে এটি সর্বদা একটি ব্লক এবং ব্লকের পরে আসা ফাঁকা রেখা মুছে দেয় তবে এটি ব্লক এবং ফাঁকা লাইন মুছে ফেলার উপায় ছিল এটা আগে আসে?
ফানকোডাব্যাট

অনুচ্ছেদের সাথে একটি পাঠ্যের মাঝখানে ফলাফলের মধ্যে কোনও সিনট্যাক্টিক পার্থক্য নেই, আছে কি? যদি সেখানে থাকে তবে একটি নতুন প্রশ্নে উদাহরণ সহ আপনি যা চান তা লিখতে পরামর্শ দিই।
টম রেগনার

6

যদি পুরো ব্লকটি স্ক্রিনে দৃশ্যমান হয় তবে আপনি আপেক্ষিক সেটিংস ব্যবহার করতে পারেন। দেখুন: সহায়তা সম্পর্কিত। 7.3 এ উপলব্ধ


আমি কতটা দরকারী তা বুঝতে পারিনি: সেগুলি ব্যবহার করা শুরু না হওয়া পর্যন্ত সেগুলি রুনু ছিল - 50 ডিডিং পাশাপাশি নেভিগেশন, 50 জেনার জন্য দুর্দান্ত
অর্শদেব

3

আপনি ব্লকটির শুরুতে বা শেষে আপনার কার্সারটি রেখে ভিজ্যুয়াল মোডে প্রবেশ করতে পারেন (শিফট-ভি)। তারপরে কাঙ্ক্ষিত ব্লকটি হাইলাইট না করা পর্যন্ত কেবল উপরে বা নীচে সরান অবশেষে, y টিপে টেক্সটটি অনুলিপি করুন বা d টিপে টেক্সটটি কেটে নিন।


সম্ভবত অদ্ভুত, তবে এ থেকে আমি বুঝতে পারি যে কোনও লাইনে কিছু পছন্দসই মিডপয়েন্ট থেকে পাঠ্যটি কীভাবে নির্বাচন করতে হবে এবং প্রতিটি লাইনের শেষে একই পয়েন্টে নীচে একাধিক লাইন নির্বাচন করতে হবে। ঠিক আমি খুঁজছেন ছিল কি.
ন্যাঙ্কার

3

ইতিমধ্যে এখানে উল্লিখিত অন্যান্য গতিগুলির পাশাপাশি, /{pattern}<CR>গতিও রয়েছে, সুতরাং আপনি যদি জানেন যে আপনি foo ধারণ করে এমন লাইনটি মুছতে চান, তবে আপনি এটি করতে পারেন dV/foo<CR>Vগতিটি বাধ্যতামূলক করার জন্য এখানে লাইন-ওয়াইন হতে হবে কারণ ডিফল্টরূপে /চরিত্রগত হয়।


3

লাইন গণনা আমার পক্ষে খুব ক্লান্তিকর, তবে 'অনুচ্ছেদ' গণনা এতটা খারাপ নয়। '{' এবং '}' যথাক্রমে কার্সারের আগে এবং পরে প্রথম খালি লাইনে কার্সারটি সরান। কার্সার মুভিং অপারেশনগুলি মুছে ফেলার সাথে মিলিত হতে পারে এবং অন্যান্য বেশ কয়েকটি উত্তর একই ধরণের পদ্ধতির (একটি লাইনের জন্য ডিডি, নথির শেষের জন্য ডিজি ইত্যাদি) ব্যবহার করে
উদাহরণস্বরূপ:

/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */

Lorem *ipsum(void) {
  return dolor(sit, amet);
}

যদি আপনার কার্সর মন্তব্য ব্লকের উপরে শুরু হয়, 'd}' মন্তব্য ব্লকটি মুছে ফেলবে, এবং 'd2}' মন্তব্য ব্লক এবং কোড ব্লক উভয়ই মুছে ফেলবে। যদি আপনার কার্সারটি কোড ব্লকের নীচে শুরু হয়, 'd {' কোড মুছে ফেলে এবং 'd2 {' উভয়টিকে মুছে দেয়। অবশ্যই, আপনি প্রথমে কার্সারটি সরিয়ে একটি ব্লকের উপরে যেতে পারেন: '{d {' বা '} d}'।

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


1

আপনি খুব বড় সংখ্যক সন্নিবেশও ddকরতে পারেন এবং তারপরে আপনি যদি কার্সারের নীচে সমস্ত লাইন মুছতে চান তবে টিপুন ।


এটি ব্যবহার করা আরও সহজ হতে পারে dG, যা ডকুমেন্টের শেষে মুছে দেয়, Gশেষ লাইনে যাওয়ার জন্য ডিফল্ট হিসাবে ।
andyg0808

1

পাঠ্যের একটি ব্লক মোছা হচ্ছে

আপনার কার্সারটি ব্লকের শুরুতে বসে বলে ধরে নিচ্ছেন:

V/^$<CR>d (where <CR> is the enter/return key)

ব্যাখ্যা

  • "লাইনওয়াইজ-ভিজ্যুয়াল" মোডটি প্রবেশ করুন: V
  • পরবর্তী খালি লাইন পর্যন্ত হাইলাইট করুন: /^$<CR>
  • মুছে ফেলা: d

কী বাঁধাই

আরও শক্তিশালী সমাধান:

:set nowrapscan
:nnoremap D V/^\s*$\\|\%$<CR>d

ব্যাখ্যা

  • অনুসন্ধান মোড়ানো অক্ষম করুন: :set nowrapscan
  • Dকীটি পুনরায় (নিম্নলিখিত কমান্ডগুলিতে) রিম্যাপ করুন ::nnoremap D
  • "লাইনওয়াইজ-ভিজ্যুয়াল" মোডটি প্রবেশ করুন: V
  • পরের খালি / সাদা স্থানের লাইন বা ইওএফ পর্যন্ত হাইলাইট করুন: /^\s*$\\|\%$<CR>
  • মুছে ফেলা: d
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.