লাইন রেফারেন্স পার্থক্য বোঝা: জি / ^ / আদর্শ এবং এর মাধ্যমে:% আদর্শ


8

ধরা যাক যে আমার কাছে খুব সাধারণ ফাইল রয়েছে

a
b
c
d
e

এবং আমি সিদ্ধান্ত নিয়েছি যে আমি প্রতিটি লাইনের পরে খালি লাইন যুক্ত করতে চাই। বেশ কয়েকটি বিভিন্ন পদ্ধতি অবিলম্বে আমার মনে ঝাঁপিয়ে পড়ে। আমরা কেবল এটি করতে পারি (এবং এভাবে ব্যর্থতা আলিঙ্গন করে)। আমরা ম্যাক্রোর মতো রেকর্ড qqo<ESC>jqকরতে পারি এবং এটি বেশ কয়েকবার পুনরাবৃত্তি করতে পারি।

এ সময় আমার কাছে আরও দুটি পদ্ধতি আরও সুস্পষ্ট বলে মনে হয়েছিল।

প্রথমত, আমি ভেবেছিলাম প্রতিটি লাইনে :normকমান্ড জারি করব o। তাই আমি দৌড় :%norm o। তবে আসলে যা ঘটে তা হ'ল আমরা blan টি ফাঁকা লাইন পেয়েছি এবং তারপরে উপরের মতো বিযুক্ত-বিচ্ছিন্ন লাইনগুলি রয়েছে। আমি এটি ব্যাখ্যা করার অর্থ এটি দিয়ে যে %norm, ভিএম এই পাঁচটি লাইন ফাইলের প্রথম পাঁচটি লাইনে নিম্নলিখিত সাধারণ কমান্ডটি বার্তাটি উত্থাপন করেoকমান্ড নতুন লাইন তৈরি করে এবং তেজ "বোবা", এই অর্থে যে এটি কিছু অন্যান্য আইডেন্টিফায়ার দ্বারা আসলে না লাইন সংখ্যা দ্বারা রেফারেন্স এবং হয়।

ভাল, আমি বিব্রত। অবশ্যই। আমি উপরের পদ্ধতিটি কাজ করতে পারি কিনা তা দেখার জন্য আমি আরও কয়েকটি জিনিস চেষ্টা করেছিলাম, তবে হায়, আমি পারিনি। কৌতূহলের বাইরে আমি আমার অন্যান্য প্রিয় ভর-প্রয়োগের পদ্ধতিটি চেষ্টা করেছিলাম। এটি আমাকে চেষ্টা করতে পরিচালিত করেছিল :g/^/norm o। আমার অবাক করার বিষয়, এটি ঠিক কাজ করে! সুতরাং আমার চোখে দেখে মনে হচ্ছে যে ভিম এখানে "বোবা" নয় ঠিক উপরের মতো এবং রেখার রেখাটি কেবল রেখা সংখ্যার চেয়ে বেশি নয়।

ঠিক কী চলছে?


2
একটি পার্শ্ব নোট অন: আপনি এটা ভালো করতে পারেন: :%s/$/\r/, কিংবা এই মত: :%s/\n/\r\r/। গ্রহনযোগ্য পদ্ধতিটি হ'ল নতুন লাইনের সাথে মেলা যায় \nতবে \rপ্রতিস্থাপনের মান হিসাবে লিখতে হয় ।
lcd047

উত্তর:


9

ওয়েল, %শর্টহ্যান্ড 1,$(প্রথম লাইন থেকে শেষ অবধি)। থেকে :he :%:

Line numbers may be specified with:             :range E14 {address}
        {number}        an absolute line number
        .               the current line                          :.
        $               the last line in the file                 :$
        %               equal to 1,$ (the entire file)            :%

এবং এর জন্য :global:

The global commands work by first scanning through the [range] lines and
marking each line where a match occurs (for a multi-line pattern, only the
start of the match matters).
In a second scan the [cmd] is executed for each marked line with its line
number prepended.  For ":v" and ":g!" the command is executed for each not
marked line.  If a line is deleted its mark disappears.

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


আহ, এটি এমনকি বিশ্বব্যাপী সহায়তা ফাইলে। আমি কত নির্বোধ। আপনাকে ধন্যবাদ
ডেভিডলরোডুদা

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