আমি vi ব্যবহার করে কোনও ফাইলের সমস্ত লাইন কীভাবে মুছতে পারি?


269

আমি vi ব্যবহার করে কোনও ফাইলের সমস্ত লাইন কীভাবে মুছতে পারি?

এই মুহুর্তে আমি এটি একটি ফাইলের সমস্ত লাইন অপসারণ করতে এই জাতীয় কিছু ব্যবহার করে:

echo > test.txt

আমি কীভাবে সমস্ত লাইন মুছে ফেলতে পারি vi?

দ্রষ্টব্য: ব্যবহার ddকরা ভাল বিকল্প নয়। অনেক লাইন থাকতে পারে।


5
আমি মনে করি ডিজি কাজ করা উচিত।
ম্যাডটাক্স

11
@ ম্যাডটাক্স, কেবলমাত্র যদি আপনি প্রথম লাইনে শুরু করেন। 1GdGযে কোনও জায়গা থেকে কাজ করবে।
হলোওয়ে

1
echo | test.txttest.txtএক্সিকিউটেবল স্ক্রিপ্ট না থাকলে বৈধ কমান্ড নয় । আমি অনুমান করছি এর echo >test.txtপরিবর্তে আপনার মানে ?
ট্রিপলি

আপনি ঠিকই @Tripleee
শীত

5
নোট করুন যে ব্যবহার না করা vi, >test.txtএটি শূন্য দৈর্ঘ্যে কাটা যথেষ্ট - echoপ্রয়োজন নেই।

উত্তর:


473

ইন viDo

:1,$d

সমস্ত লাইন মুছে ফেলতে।

:কমান্ড প্রবর্তন (এবং নীচে কার্সার চলে আসে)। একটি ইঙ্গিত যা লাইনের নিম্নলিখিত কমান্ড (হয় ) এ কাজ করা উচিত। এক্ষেত্রে এক থেকে শেষ লাইন পর্যন্ত রেঞ্জ (নির্দেশিত , তাই আপনাকে নথিতে লাইনগুলির সংখ্যা জানার দরকার নেই)। চূড়ান্তটি নির্দেশিত লাইনগুলি মুছে ফেলার জন্য দাঁড়ায়।
1,$d$
d

একটি সংক্ষিপ্ত রূপ আছে ( :%d) তবে আমি নিজেকে কখনই এটি ব্যবহার করে না বলে মনে করি। :1,$dআরো সহজে হতে পারে না "অভিযোজিত" যেমন করতে :4,$-2dশুধুমাত্র প্রথম 3 এবং শেষ 2 লাইন যাব বাকি মোছা হচ্ছে।


9
প্রো টিপ। আর নেইESC+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd...
rdev5

2
@ rdev5 .পরের বার চেষ্টা করে একটি আদেশটি পুনর্বার করার চেষ্টা করুন
গাজিহান অ্যালানকাস

169

Vi তে আমি ব্যবহার করি

:%d

কোথায়

  • : vi কে কমান্ড মোডে যেতে বলে
  • % সমস্ত লাইন মানে
  • d : মুছে ফেলা

কমান্ড লাইনে,

> test.txt

এছাড়াও করবে।

ডিডির সমস্যা কি?

dd if=/dev/null of=test.txt

কোথায়

  • /dev/null একটি বিশেষ 0 বাইট ফাইল
  • if ইনপুট ফাইল
  • of আউটপুট ফাইল

আমি ভাবছিলাম যে ddফাইলের প্রতিটি লাইনের জন্য আমার কলমের প্রয়োজন।
শীত

ভাল. এটি আমার প্রত্যাশার চেয়েও সহজ ...
শীতল

11
আপনাকে ddvi কমান্ডের (যা ওপি বলতে বোঝায়) এবং ddইউটিলিটিটির মধ্যে পার্থক্য করতে হবে , যা আপনি একটি উদাহরণ দিয়েছেন। এছাড়াও, > test.txtনন-ব্যাশ শেলগুলিতে প্রত্যাশার মতো কাজ করতে পারে না (যেমন zsh)।
ছাড়ুন

1
পছন্দ করুন এখন আমি এটি ভাবতে এসেছি ...
আরচেমার

2
বা : >test.txtযা কেবল খুব প্রান্তিক দীর্ঘ।
ট্রিপলি

53

আমি প্রস্তাব দিচ্ছি যে আপনি কেবল এটি করুন (কোনও পসিক্স-কমপ্লায়েন্ট শেলটিতে কাজ করা উচিত):

> test.txt

আপনি যদি সত্যই এটি vi এর মাধ্যমে করতে চান তবে আপনি এটি করতে পারেন:

  • 1 জি (প্রথম লাইনে যান)
  • ডিজি (শেষ লাইনে মুছুন)

30
@ কুল্ড: ... একবার?
ক্রিস ডাউন

5
Gশেষ লাইন প্রতিনিধিত্ব করে। আপনি যদি প্রথম লাইনে ( gg) থাকেন তবে dGvi কে বর্তমান লাইনের (প্রথম লাইন) শেষ লাইনের সমস্ত লাইন অপসারণ করতে বলুন। সুতরাং, আপনি এটি একটি শট করে।
আনটনাট

6
ggvim নির্দিষ্ট। এটি 1Gপ্রচলিত vi।
স্টাফেন চেজেলাস

1
আপনার শেল সিনট্যাক্স কিছু শেলের কনফিগারেশনের উপর নির্ভরশীল। উভয় বাশ এবং zsh (ডিফল্টরূপে zsh) ইন্টারেক্টিভ শেলগুলি এই আদেশটি পাওয়ার পরে STDIN এ ইনপুটটির জন্য অপেক্ষা করতে পারে এবং ফাইলটি প্রকৃতপক্ষে সাফ করার জন্য অতিরিক্ত << সিআরটিএল> + ডি প্রয়োজনীয়। এটি চালানোর ক্ষমতাটিও ক্লোবার সেটিংসের উপর নির্ভরশীল। >| test.txt < /dev/nullএটি কিছুটা শক্তিশালী কারণ এটি সর্বদা ফাইলটিকে ক্লোবার করে এবং ইন্টারেক্টিভ টার্মিনালগুলিতে ইনপুটটির জন্য অপেক্ষা করা এড়াতে পারে।
কালেব

1
@ কালেব: যেমন আমি বলেছিলাম যে কোনও পসিক্স -কমপ্লায়েন্ট শেল। :-) এই দুটি পরিস্থিতির কোনওটিই পসিক্স-অভিযোগ নয়।
ক্রিস ডাউন

28

যদি আপনার কার্সারটি প্রথম লাইনে থাকে (যদি না হয় তবে টাইপ করুন: ggবা 1G), তবে আপনি কেবল ব্যবহার করতে পারেন dG। এটি বর্তমান লাইন থেকে ফাইলের শেষ পর্যন্ত সমস্ত লাইন মুছে ফেলবে। সুতরাং আপনি ফাইল থেকে সমস্ত লাইন মুছে ফেলবেন তা নিশ্চিত করার জন্য, আপনি উভয়কে একসাথে মিশ্রিত করতে পারেন যা হ'ল: ggdG(কমান্ড মোডে থাকাকালীন)।

অথবা %dপ্রাক্তন মোডে, কম্যান্ড-লাইন উদাহরণ: vim +%d foo.bar

সম্পর্কিত: আমি কীভাবে ভিআইএম-এ ফাইলের বর্তমান লাইন থেকে শেষ পর্যন্ত সমস্ত পাঠ্য মুছতে পারি?


3
এর চেয়ে বেশি এরগোনমিক হওয়ার জন্য +1: 1,। D। যেহেতু এখনই আমাদের আঙ্গুলগুলি কোলন টাইপ করার জন্য তারযুক্ত হয় না;)
অ্যারন আর।

2
সম্মত। dGআমি সর্বদা এটি ব্যবহার করি।
লাঞ্চমিট317

1
আমি এটি ( ggdG) ভিমে মধ্যে সবচেয়ে সহজ পদ্ধতি। এই উত্তরটি অন্যদের মতো প্রচারিত না হওয়ার কারণটি কি ggখাঁটি vi এর অস্তিত্ব নয়?
থিমেরা

27

আমি একটি অলস বন্ধু, এবং আমি এটি সহজ রাখতে পছন্দ করি। ggdGসহ পাঁচটি কীস্ট্রোক রয়েছেShift

ggফাইলের প্রথম লাইনে যায়, dএটি হচ্ছে dএকাদশের ক্রিয়াশক্তি এবং Gএটি ফাইলের নীচে যাওয়ার আন্দোলন। Verbosely, এটি ফাইলের শুরুতে যায় এবং টাইল শেষ না হওয়া অবধি সবকিছু মুছে ফেলা হয়।


rsrs। আমি খুব অলস এবং ব্যবহার করছি :$dবা :1,$dদ্রুততর উপায় (আমি কম অক্ষর লিখি) kkk
শীত

3
:%dভাল বিকল্প, যেহেতু আপনি কেবল সেভাবে 5 টি কীস্ট্রোক ব্যবহার করেন।
ট্যাঙ্কোরস্যামশ

1
@ ট্যানকোরস্যামশ ggহ'ল একটি vimআদেশ, না vi
কিরিয়াস

ভাল ধরা, আমার ভুল
TankorSmash


5

আমি সবসময় ব্যবহার করি ggVG

  • gg বর্তমান সম্পাদনা ফাইলের শুরুতে লাফ দেয়
  • V(মূলধন করা v) বর্তমান লাইনটি নির্বাচন করবে। এই ক্ষেত্রে বর্তমান সম্পাদনা ফাইলের প্রথম লাইন
  • G(মূলধনিত ছ) ফাইলের শেষে চলে যাবে। এই ক্ষেত্রে, যেহেতু আমি প্রথম লাইনটি Gনির্বাচন করেছি, এই ফাইলটিতে পুরো পাঠ্যটি নির্বাচন করবে।

তারপরে আপনি কেবল সমস্ত লাইন টিপুন dবা xমুছতে পারেন ।


আপনি যদি dউল্লম্বভাবে ব্যবহার করেন তবে এটি স্বয়ংক্রিয়ভাবে লাইনওয়াইজ প্রযোজ্য। dlডানদিকে একটি অক্ষর djমুছে দেয়, উদাহরণস্বরূপ একটি লাইন মুছে দেয়।
ট্যাঙ্কোরস্যামশ

3

মনে রাখবেন যে আপনার প্রশ্নে echo > test.txtএটি একটি একক লাইন বিরতি দিয়ে একটি ফাইল তৈরি করে, খালি ফাইল নয়।

শেল থেকে, ব্যবহার echo -n > test.txtবা বিবেচনা করুন : > test.txt

আমি সাধারণত একটি vi সম্পাদনা কমান্ড ব্যবহার করার সময় (আমি ব্যবহার করি ggdG), আপনি বর্তমান ফাইলটির মতো একটি রেফারেন্স সহ শেলটিতে কল করতে পারেন:

:!:>%

এটি প্রায় হিসাবে সংক্ষিপ্ত ggdG, তবে টাইপ করা শক্ত এবং আপনিও নিশ্চিত করতে হবে যে আপনি পরিবর্তিত ফাইলটি পুনরায় লোড করতে চান, সুতরাং আমি বিশেষত এই ক্ষেত্রে এটির প্রস্তাব দিচ্ছি না, তবে vi এর থেকে শেল কমান্ড কীভাবে ব্যবহার করতে হবে তা জেনে রাখা উচিত is দরকারী।

এটি ভেঙে:

  • : একটি vi কমান্ড শুরু করুন
  • ! একটি শেল কমান্ড শুরু করুন
  • : এটি খালি আউটপুট সহ একটি শেল বিল্টিন কমান্ড
  • > আউটপুট পুনর্নির্দেশ
  • % vi বর্তমান ফাইলের নামের সাথে এটি প্রতিস্থাপন করে

প্রস্তাবিত :1,$dএছাড়াও অবশ্যই একটি ভাল, এবং আমি যখন এটি করছি ঠিক সেখানেও আছে1GdG


:!:>%viশেলটির জন্য ফাইলের নামটি এড়াতে না পারায় এটি বিপজ্জনক ( $(reboot)উদাহরণস্বরূপ বলা একটি ফাইল সম্পাদনা করার সময় এটি করবেন না )। আপনার কিছু লাগবে:call system(":>" . shellescape(expand("%")))
স্টাফেন চেজেলাস

3

আরেকটি সমাধান:

truncate -s 0 file

সত্যিকারের চেয়ে সহজ নয় >fileতবে ঠিক আছে।
পিএইচকে

1
একটি ভাল পদ্ধতি বলে মনে হচ্ছে, তবে লক্ষ্যটি এটি vi ব্যবহার করে করছে। Tks
ঠান্ডা


-1

বিপুল সংখ্যক লাইন মুছতে আপনি একটি কৌশল ব্যবহার করতে পারেন। নিশ্চিত করুন যে আপনি সন্নিবেশ মোডে নেই (ESC টিপুন) তারপরে 1000dd টাইপ করুন।


1
কমান্ডটি কীভাবে কাজ করে / কীভাবে এটি কাজ করে তার ব্যাখ্যাটি আপনাকে অন্তর্ভুক্ত করতে হবে (পরবর্তী 1000 লাইন মুছে ফেলবে , যা কার্সার প্রথম লাইনে না থাকলে সমস্ত লাইন মুছবে না)।
সেবাসথ

এই কারণেই আমি এটিকে একটি কৌশল বলেছি :)
রাদু

-1

আমি ggলাইনগুলির শীর্ষে পৌঁছানোর জন্য টাইপ করি এবং তারপরে একটি করি 100 dd। এটি সম্পাদকের শীর্ষ লাইনে পয়েন্টারটি নিয়ে আসে এবং সেখান থেকে 100 টি লাইন সাফ করে। ফাইলটি দীর্ঘতর হলে আপনাকে আরও লাইন যুক্ত করতে সংখ্যাটি সামঞ্জস্য করতে হতে পারে।


-1
> file.txt

আপনি সত্যিকার অর্থে না চাইলে আপনাকে vi খুলতে হবে না।


1
হ্যালো এবং U&L স্ট্যাক এক্সচেঞ্জ সাইটে আপনাকে স্বাগতম। এই সাইটটি কীভাবে সেরা পোস্ট করা যায় সে সম্পর্কিত তথ্যের জন্য দয়া করে সহায়তা কেন্দ্রটি পর্যালোচনা করুন । আমরা এই সাইটে তথ্যমূলক এবং অনন্য প্রশ্ন এবং উত্তর চাষ করতে চাই। আপনার উত্তরটি এই পোস্টে থাকা অন্যান্য উত্তর এবং মন্তব্যের অনুরূপ। দয়া করে সম্পাদনা আরো একটি অনন্য এবং তথ্যপূর্ণ উত্তর দয়া করে হতে আপনার পোস্ট। ধন্যবাদ!
কেমোটেপ

এছাড়া প্রশ্ন বিন্দু "চ ব্যবহার" হয় ...
জেফ স্ক্যালার হলেন

আপনার পরামর্শ অনুসারে আমি চেষ্টা করেছিলাম। আমি পেয়েছি bash: > file.txt: command not found
রোয়াইমা

@roaima আপনি যদি জিনিসটি উদ্ধৃত করেন তবে তা পাবেন "> file.txt"
কুসালানন্দ

1
@ জেফশালার : vi >file.txt ;-)
কুসালানন্দ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.