ভিমের সাথে আপনার সমস্যা হ'ল আপনি ভি কর্কশ করবেন না ।
আপনি কাটার কথা উল্লেখ করেছেন yy
এবং অভিযোগ করেছেন যে আপনি প্রায় পুরো লাইন কাটতে চান না। প্রকৃতপক্ষে প্রোগ্রামারগুলি, সোর্স কোড সম্পাদনা করার জন্য, প্রায়শই পুরো লাইনগুলি, লাইনের পরিসীমা এবং কোডের ব্লকগুলিতে কাজ করতে চায়। তবে, yy
বেনামি অনুলিপি বাফারে (বা vi তে বলা হয় "রেজিস্ট্রেশন" ) এর পাঠ্যকে ইঙ্ক করার একমাত্র উপায় ।
Vi এর "জেন" হ'ল আপনি কোনও ভাষা বলছেন। প্রাথমিক y
একটি ক্রিয়াপদ হয়। বিবৃতি yy
একটি প্রতিশব্দ y_
। y
সহজে টাইপ করতে, যেহেতু এটা যেমন একটি সাধারণ অপারেশন করা পর্যন্ত দ্বিগুণ করা হয়।
এটি হিসাবে প্রকাশ করা যেতে পারে dd
P
(বর্তমান লাইনটি মুছুন এবং একটি অনুলিপি আবার জায়গায় আটকান; পার্শ্ব প্রতিক্রিয়া হিসাবে বেনামে রেজিস্টারে একটি অনুলিপি রেখে)। y
এবং d
"ক্রিয়া" এর পাশে তাদের হিসাবে কোন আন্দোলন নিতে "বিষয়।" সুতরাং yW
"Yank এখান থেকে (কার্সার) বর্তমান / পরবর্তী (বড়) শব্দের শেষে থেকে" এবং y'a
হল "Yank এখান থেকে 'নামক চিহ্ন ধারণকারী লাইন একটি ।"
আপনি যদি কেবলমাত্র বেসিক, ডাউন, বাম এবং ডান কার্সার চলনগুলি বুঝতে পারেন তবে vi আপনার জন্য "নোটপ্যাড" এর অনুলিপি ছাড়া আর ফলবান হবে না। (ঠিক আছে, আপনার কাছে এখনও সিনট্যাক্স হাইলাইটিং এবং একটি পিডলিং ~ 45KB বা তার চেয়ে বড় ফাইল হ্যান্ডেল করার ক্ষমতা থাকবে; তবে আমার সাথে এখানে কাজ করুন)।
vi এর 26 "চিহ্ন" এবং 26 "রেজিস্ট্রার রয়েছে। m
কমান্ডটি ব্যবহার করে যে কোনও কার্সার অবস্থানে একটি চিহ্ন সেট করা আছে । প্রতিটি চিহ্ন একটি একক লোয়ার কেস লেটার দ্বারা মনোনীত করা হয়। এভাবে বর্তমান অবস্থানে ma
' a ' চিহ্ন mz
সেট করে এবং ' z ' চিহ্নটি সেট করে । আপনি '
(একক উদ্ধৃতি) কমান্ডটি ব্যবহার করে একটি চিহ্নযুক্ত লাইনে যেতে পারেন can এভাবে 'a
' a ' চিহ্ন যুক্ত রেখার শুরুতে চলে যায় । আপনি `
(ব্যাককোট) কমান্ডটি ব্যবহার করে যে কোনও চিহ্নের সঠিক স্থানে যেতে পারেন to সুতরাং `z
সরাসরি ' z ' চিহ্নের সঠিক স্থানে চলে যাবে ।
কারণ এটি "আন্দোলন" এগুলি অন্যান্য "বিবৃতিতে" বিষয় হিসাবেও ব্যবহার করা যেতে পারে।
সুতরাং, পাঠ্যের একটি স্বেচ্ছাসেবী নির্বাচন কাটানোর একটি উপায় হ'ল একটি চিহ্ন ফেলে রাখা (আমি সাধারণত ' a ' কে আমার "প্রথম" চিহ্ন হিসাবে ব্যবহার করি, ' z ' কে আমার পরবর্তী চিহ্ন হিসাবে, ' b ' অন্য হিসাবে, এবং ' e ' হিসাবে হিসাবে ব্যবহার করি) আর একটি (আমি স্মরণ করি না যে vi ব্যবহারের 15 বছরে চারটি চিহ্নের বেশি ইন্টারেক্টিভভাবে ব্যবহার করেছি ; কেউ ম্যাক্রো দ্বারা কীভাবে চিহ্ন এবং রেজিস্টার ব্যবহার করা হয় সে সম্পর্কিত একটি নিজস্ব সম্মেলন তৈরি করে যা কোনও ব্যক্তির ইন্টারেক্টিভ প্রসঙ্গে বিরক্ত করে না) তারপরে আমরা যাই আমাদের কাঙ্ক্ষিত পাঠ্যের অন্য প্রান্তে; আমরা উভয় প্রান্তেই শুরু করতে পারি, এতে কিছু যায় আসে না Then তারপরে আমরা কেবল d`a
কাটা বা y`a
অনুলিপি ব্যবহার করতে পারি Thus সুতরাং সম্পূর্ণ প্রক্রিয়াটিতে একটি 5 কীস্ট্রোক ওভারহেড থাকে (ছয়টি যদি আমরা "সন্নিবেশ করানো শুরু করি তবে ছয়টি "মোড এবং প্রয়োজনEscআউট কমান্ড মোড)। একবার আমরা কাটা কপি করে থাকেন তারপর একটি কপিতে পেস্ট একটি একক কীস্ট্রোক হল: p
।
আমি বলি যে এটি পাঠ্যটি কাটা বা অনুলিপি করার এক উপায়। তবে এটি অনেকের মধ্যে একটি মাত্র। প্রায়শই আমরা আমাদের কর্সারকে ঘুরিয়ে না দিয়ে এবং চিহ্ন না ফেলেই পাঠ্যের পরিসীমা আরও সংক্ষিপ্তভাবে বর্ণনা করতে পারি। উদাহরণস্বরূপ যদি আমি পাঠ্যের অনুচ্ছেদে থাকি তবে আমি অনুচ্ছেদটির শুরুতে বা শেষে যথাক্রমে ব্যবহার করতে {
এবং }
আন্দোলন করতে পারি । সুতরাং, পাঠ্যের অনুচ্ছেদে স্থানান্তরিত করতে আমি এটি {
d}
(3 কীস্ট্রোক) ব্যবহার করে কেটেছি । (আমি যদি ইতিমধ্যে অনুচ্ছেদের প্রথম বা শেষ লাইনে উপস্থিত হই তবে আমি কেবল যথাক্রমে d}
বা d{
যথাক্রমে ব্যবহার করতে পারি ।
"অনুচ্ছেদে" ধারণাটি এমন কোনও ক্ষেত্রে ডিফল্ট হয় যা সাধারণত স্বজ্ঞাতভাবে যুক্তিসঙ্গত হয়। সুতরাং এটি প্রায়শই কোড পাশাপাশি গদ্যের জন্যও কাজ করে।
প্রায়শই আমরা এমন কিছু প্যাটার্ন জানি (নিয়মিত প্রকাশ) যা আমাদের আগ্রহী পাঠ্যের এক প্রান্ত বা অন্যটি চিহ্নিত করে। সামনের দিকে বা পিছনে সন্ধান করা vi এর চলন । সুতরাং এগুলি আমাদের "বিবৃতিতে" বিষয় হিসাবেও ব্যবহার করা যেতে পারে। সুতরাং আমি d/foo
"লু" স্ট্রিং যুক্ত পরবর্তী লাইনটি বর্তমান লাইন থেকে কাটাতে এবং বর্তমান লাইন থেকে y?bar
"বার" ধারণকারী সাম্প্রতিক (পূর্ববর্তী) লাইনে অনুলিপি করতে পারি। আমি যদি পুরো লাইনগুলি না চাই তবে আমি অনুসন্ধানের চলনগুলি (তাদের নিজস্ব বিবৃতি হিসাবে) ব্যবহার করতে পারি, আমার চিহ্ন (গুলি) ফেলে দিন এবং `x
পূর্বে বর্ণিত কমান্ডগুলি ব্যবহার করব ।
"ক্রিয়াপদ" এবং "বিষয়" এর পাশাপাশি vi এর "অবজেক্টস" (শব্দটির ব্যাকরণগত অর্থে) রয়েছে। এখনও অবধি আমি কেবল বেনামে রেজিস্টার ব্যবহারের বর্ণনা দিয়েছি। যাইহোক, আমি " ডাবল উদ্ধৃতি সংশোধনকারী " সহ "অবজেক্ট" রেফারেন্স উপস্থাপন করে 26 "নামের" নিবন্ধগুলির যে কোনওটি ব্যবহার করতে পারি "
। সুতরাং আমি যদি ব্যবহার "add
করি তবে আমি বর্তমান রেখাটি ' এ ' রেজিস্টারে "by/foo
কাটছি এবং যদি আমি ব্যবহার করি তবে আমি এখানে ' বি ' রেজিস্টারে "foo" ধারণকারী পরবর্তী লাইনে লেখার অনুলিপিটি ইয়েঙ্ক করছি । একটি রেজিস্টার থেকে আটকানোর জন্য আমি কেবল একই সংশোধক ক্রমের সাথে পেস্টটিকে উপসর্গ করেছি: "ap
' ক ' রেজিস্টারের একটি অনুলিপি আটকান"bP
বর্তমান লাইনের আগে ' বি ' থেকে একটি অনুলিপি আটকান ।
"উপসর্গ" এর এই ধারণাটি ব্যাকরণগত "বিশেষণ" এবং "অ্যাডওয়্যারস" এর এনালগগুলিকে আমাদের পাঠ্য ম্যানিপুলেশন "ভাষায় যুক্ত করে। 3J
এর অর্থ "পরবর্তী তিনটি লাইনে যোগ দিন" এবং এর d5}
অর্থ "এখান থেকে নীচে পঞ্চম অনুচ্ছেদের শেষে বর্তমান রেখাটি থেকে মুছুন"।
এটি সমস্ত মধ্যবর্তী স্তর vi । এর কোনওটিই ভিম নির্দিষ্ট নয় এবং vi তে আরও অনেক উন্নত কৌশল রয়েছে যদি আপনি সেগুলি শিখতে প্রস্তুত হন। আপনি যদি কেবলমাত্র এই মধ্যবর্তী ধারণাগুলি আয়ত্ত করতে পারেন তবে সম্ভবত আপনি কোনও ম্যাক্রো লেখার খুব কমই দরকার পড়েছিলেন কারণ সম্পাদকের "নেটিভ" ভাষা ব্যবহার করে বেশিরভাগ জিনিস সহজেই পাঠ্য ম্যানিপুলেশন ভাষা যথেষ্ট সংক্ষিপ্ত এবং অভিব্যক্তিপূর্ণ হতে পারে।
আরও উন্নত কৌশলগুলির একটি নমুনা:
বেশ কয়েকটি :
কমান্ড রয়েছে, উল্লেখযোগ্যভাবে :% s/foo/bar/g
বৈশ্বিক প্রতিস্থাপন কৌশল। (এটি উন্নত নয় তবে অন্যান্য :
আদেশগুলিও হতে পারে)। :
কমান্ডের পুরো সেটটি icallyতিহাসিকভাবে vi এর পূর্ববর্তী অবদানগুলি এড (লাইন সম্পাদক) এবং পরে প্রাক্তন (বর্ধিত লাইন সম্পাদক) ইউটিলিটি হিসাবে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছিল । আসলে vi এর নাম দেওয়া হয়েছে কারণ এটি ভিজ্যুয়াল ইন্টারফেসটি প্রাক্তন হতে পারে ।
:
কমান্ডগুলি সাধারণত পাঠ্যের লাইনে কাজ করে। টার্মিনাল স্ক্রিনগুলি অস্বাভাবিক ছিল এবং অনেক টার্মিনাল "টেলি টাইপ" (টিটিওয়াই) ডিভাইস ছিল এমন সময়ে যুগে এড এবং প্রাক্তন লেখা হয়েছিল। সুতরাং পাঠ্যটির মুদ্রিত অনুলিপিগুলি থেকে কাজ করা খুব সাধারণ কাজ ছিল, অত্যন্ত সংক্ষিপ্ত ইন্টারফেসের মাধ্যমে কমান্ড ব্যবহার করে (সাধারণ সংযোগের গতি 110 সেকেন্ড বা মোটামুটিভাবে প্রতি সেকেন্ডে 11 টি অক্ষর ছিল - যা দ্রুত টাইপিস্টের চেয়ে ধীর হয়; ল্যাগগুলি সাধারণ ছিল মাল্টি-ইউজার ইন্টারেক্টিভ সেশনস; কাগজ সংরক্ষণের জন্য প্রায়শই কিছুটা অনুপ্রেরণা ছিল)।
সুতরাং বেশিরভাগ :
কমান্ডের বাক্য গঠনটিতে একটি ঠিকানা বা ঠিকানাগুলির পরিসর (লাইন নম্বর) অন্তর্ভুক্ত থাকে যার পরে একটি আদেশ থাকে। স্বাভাবিকভাবেই এক আক্ষরিক লাইন সংখ্যা ব্যবহার করতে পারে: :127,215 s/foo/bar
প্রতিটি লাইনে এ "বার" মধ্যে "foo বিন্যাস" প্রথম সংঘটন পরিবর্তন করতে 127 এবং 215. এক মধ্যে যেমন কিছু বর্ণমালা ব্যবহার করতে পারে .
বা $
যথাক্রমে বর্তমান এবং গত লাইনের জন্য। একজন যথাক্রমে উপসর্গগুলি ব্যবহার করতে পারেন +
এবং -
যথাক্রমে নিরাময়কারী লাইনের পরে বা আগে অফসেটগুলি উল্লেখ করতে পারেন। সুতরাং: :.,$j
অর্থ "বর্তমান রেখা থেকে শেষ লাইনে, তাদের সকলকে একটি লাইনে যুক্ত করুন" (সব লাইন) এর :%
সমার্থক শব্দ :1,$
।
:... g
এবং :... v
কমান্ড কিছু ব্যাখ্যা বহন হিসাবে তারা অবিশ্বাস্যভাবে শক্তিশালী। :... g
একটি প্যাটার্ন (নিয়মিত প্রকাশ) এর সাথে মিলিত সমস্ত রেখায় পরবর্তী কমান্ড প্রয়োগ করার জন্য "বিশ্বব্যাপী" হ'ল একটি উপসর্গ যা সেই সমস্ত কমান্ড :... v
প্রয়োগ করে যা প্রদত্ত প্যাটার্নের সাথে মেলে না (যা "কনভার্স" থেকে "ভি") v অন্যান্য প্রাক্তন কমান্ডগুলির মতো এগুলি / রেঞ্জের রেফারেন্সগুলিকে সম্বোধন করে উপসর্গ করা যেতে পারে। এর :.,+21g/foo/d
অর্থ "পরবর্তী 21 টি লাইনের মধ্য দিয়ে" foo "স্ট্রিং যুক্ত যে কোনও লাইন মুছুন" এর :.,$v/bar/d
অর্থ "এখান থেকে ফাইলের শেষ অবধি," বার "স্ট্রিং না থাকা কোনও লাইন মুছুন।
এটি আকর্ষণীয় যে সাধারণ ইউনিক্স কমান্ড গ্রেপ প্রকৃতপক্ষে এই প্রাক্তন কমান্ড দ্বারা অনুপ্রাণিত হয়েছিল (এবং এটি যেভাবে এটি নথিভুক্ত করা হয়েছিল তার নাম অনুসারে)। প্রাক্তন কমান্ড :g/re/p
(, grep) তারা নথিভুক্ত কিভাবে "বিশ্বব্যাপী" "রেগুলার এক্সপ্রেশন" (পুনরায়) "একটি ধারণকারী লাইন" মুদ্রণ ছিল। যখন এড এবং প্রাক্তন ব্যবহার করা হত, :p
কমান্ডটি প্রথম যেটি কেউ শিখেছিল এবং যে কোনও ফাইল সম্পাদনার সময় প্রায়শই প্রথম ব্যবহৃত হত of এটি কীভাবে আপনি বর্তমান সামগ্রীগুলি মুদ্রণ করেছেন (সাধারণত একবারে :.,+25p
বা কেবল এমন কিছু ব্যবহার করে একটি পৃষ্ঠায় পূর্ণ থাকে )।
নোট করুন :% g/.../d
বা (এর পুনর্বিবেচনা / কনভার্স কাউন্টার পার্ট: :% v/.../d
সর্বাধিক সাধারণ ব্যবহারের নিদর্শন However তবে অন্যান্য কয়েকটি ex
কমান্ড রয়েছে যা স্মরণযোগ্য worth
আমরা m
লাইনগুলি চারদিকে ঘোরাতে, এবং j
লাইনে যোগ দিতে ব্যবহার করতে পারি । উদাহরণস্বরূপ যদি আপনার একটি তালিকা রয়েছে এবং আপনি মুছে ফেলা ব্যতীত সমস্ত স্টাফ ম্যাচিংয়ের (বা বিপরীতভাবে কিছু প্যাটার্নের সাথে মেলে না) আলাদা করতে চান, তবে আপনি এর মতো কিছু ব্যবহার করতে পারেন: :% g/foo/m$
... এবং সমস্ত "ফু" লাইনগুলিতে স্থানান্তরিত হবে ফাইলের শেষ। (আপনার ফাইলের শেষটি স্ক্র্যাচ স্পেস হিসাবে ব্যবহার করার বিষয়ে অন্যান্য টিপটি নোট করুন)। এটি সমস্ত "foo" রেখার অপেক্ষাকৃত অর্ডার সংরক্ষণ করবে এবং বাকী তালিকা থেকে এনেছে। (এটি এমন কিছু করার সমতুল্য: 1G!GGmap!Ggrep foo<ENTER>1G:1,'a g/foo'/d
(ফাইলটিকে তার নিজের লেজে অনুলিপি করুন, লেজটি ফিল্টার করুন grep
এবং সমস্ত জিনিস মাথা থেকে মুছুন)।
লাইনে যোগ দিতে সাধারণত আমি পূর্বসূরীর সাথে যুক্ত হওয়া সমস্ত রেখার জন্য একটি প্যাটার্ন খুঁজে পেতে পারি (উদাহরণস্বরূপ, বুলেট তালিকার "^ *" এর পরিবর্তে "^" দিয়ে শুরু হওয়া সমস্ত লাইন)। সে ক্ষেত্রে আমি ব্যবহার করব: :% g/^ /-1j
(প্রতিটি মিলের লাইনের জন্য, একটি লাইন উপরে যান এবং তাদের সাথে যোগ দিন)। (বিটিডাব্লু: বুলেটলাইনগুলি বুলেটলাইনগুলি অনুসন্ধান করার চেষ্টা করছে এবং পরবর্তীটিতে যোগ দেওয়ার জন্য কয়েকটি কারণে কাজ করে না ... এটি একটি বুলেট লাইনে অন্য যুক্ত হতে পারে এবং এটি সমস্ত বুলেট লাইনে যোগ দেবে না ) এর ধারাবাহিকতা; এটি কেবল ম্যাচগুলিতে যুগলভাবে কাজ করবে)।
আপনি এবং আমাদের (গ্লোবাল / কনভার্স-গ্লোবাল) কমান্ডের সাহায্যে আমাদের পুরানো বন্ধু s
(বিকল্প) ব্যবহার করতে পারেন তা উল্লেখ করার প্রায় প্রয়োজন নেই । সাধারণত আপনার এটি করার দরকার নেই। তবে, এমন কিছু ক্ষেত্রে বিবেচনা করুন যেখানে আপনি কেবল অন্য কয়েকটি প্যাটার্নের সাথে মিল রেখে লাইনে পরিবর্তন করতে চান। প্রায়শই আপনি ক্যাপচারগুলির সাথে একটি জটিল প্যাটার্ন ব্যবহার করতে পারেন এবং যে পরিবর্তনগুলি চান না এমন লাইনগুলির অংশগুলি সংরক্ষণ করতে পিছনে উল্লেখগুলি ব্যবহার করতে পারেন। তবে প্রায়শই ম্যাচটি বিকল্পের থেকে আলাদা করা সহজ হবে: - "ফু" সমেত প্রতিটি লাইনের জন্য "জেডজেডস" এর সাথে সমস্ত "বার" বিকল্পযুক্ত। (কিছুটা এইরকমg
v
:% g/foo/s/bar/zzz/g
:% s/\(.*foo.*\)bar\(.*\)/\1zzz\2/g
কেবলমাত্র "বার" এর ক্ষেত্রে কেবল সেই ক্ষেত্রে কাজ করবে যা একই লাইনে "foo" দ্বারা প্রেরিত হয়েছিল; এটি ইতিমধ্যে যথেষ্ট পরিমাণে যথেষ্টই যথেষ্ট, এবং "বার" এর আগে "ফু" এর আগে থাকা সমস্ত কেস ধরতে আরও ম্যাঙ্গেল করতে হবে)
বিন্দু শুধু চেয়ে বেশি যে p
, s
এবং d
লাইন ex
কম্যান্ড সেট।
:
ঠিকানাগুলি এছাড়াও চিহ্ন উল্লেখ করতে পারেন। সুতরাং আপনি এটি ব্যবহার করতে পারেন: :'a,'bg/foo/j
তার পরবর্তী লাইনে স্ট্রিং foo যুক্ত যে কোনও লাইনে যোগ দিতে, যদি এটি ' a ' এবং ' b ' চিহ্নগুলির মধ্যে রেখার মাঝে থাকে । (হ্যাঁ, পূর্ববর্তী সমস্ত ex
কমান্ডের উদাহরণগুলি এই ধরণের সম্বোধন অভিব্যক্তিগুলির সাথে উপসর্গ করে ফাইলের লাইনগুলির উপধারার মধ্যে সীমাবদ্ধ থাকতে পারে)।
এটি বেশ অস্পষ্ট (আমি গত 15 বছরে কয়েকবার এরকম কিছু ব্যবহার করেছি)। যাইহোক, আমি নির্দ্বিধায় স্বীকার করব যে আমি প্রায়শই পুনরাবৃত্তভাবে এবং ইন্টারেক্টিভভাবে জিনিসগুলি করেছি যা সম্ভবত আরও সঠিকভাবে করা সম্ভব হত যদি আমি সঠিক সময়টি আবিষ্কার করার জন্য সময় নিই taken
আরেকটি খুব দরকারী vi বা প্রাক্তন কমান্ডটি হ'ল :r
অন্য ফাইলের বিষয়বস্তু পড়তে। সুতরাং: :r foo
বর্তমান লাইনে "foo" নামের ফাইলের বিষয়বস্তু সন্নিবেশ করানো হয়।
আরও শক্তিশালী হ'ল :r!
আদেশ। এটি একটি কমান্ডের ফলাফলগুলি পড়ে। এটি vi সেশন স্থগিতকরণ , কমান্ড চালানো, এর আউটপুটটিকে অস্থায়ী ফাইলে পুনর্নির্দেশ করা, আপনার vi সেশনটি পুনরায় শুরু করা এবং টেম্প থেকে সামগ্রীগুলি পড়া সমান। ফাইল।
আরও শক্তিশালী !
হ'ল (ব্যাং) এবং :... !
( প্রাক্তন ব্যাং) কমান্ড। এগুলি বাহ্যিক কমান্ডগুলিও কার্যকর করে এবং বর্তমান পাঠ্যে ফলাফলগুলি পড়ে। যাইহোক, তারা কমান্ডের মাধ্যমে আমাদের পাঠ্যের নির্বাচনগুলিও ফিল্টার করে! এটি আমরা আমাদের ফাইলে সমস্ত লাইনকে বাছাই করতে পারি 1G!Gsort
( G
এটি vi "গোটো" কমান্ড ব্যবহার করে; এটি ফাইলের শেষ লাইনে যাওয়ার জন্য ডিফল্ট হয় তবে লাইন নম্বর দ্বারা উপসর্গ করা যেতে পারে, যেমন 1, প্রথম লাইন)। এটি প্রাক্তন বৈকল্পিকের সমতুল্য :1,$!sort
। লেখকরা প্রায়শই !
ইউনিক্স এফএমটি বা ভাঁজ ইউটিলিটিগুলির সাথে পুনর্নির্মাণের জন্য বা "শব্দ মোড়ানোর" পাঠ্যের নির্বাচনের জন্য ব্যবহার করেন। একটি খুব সাধারণ ম্যাক্রো হয়{!}fmt
(বর্তমান অনুচ্ছেদে পুনরায় ফর্ম্যাট করুন)। প্রোগ্রামাররা কখনও কখনও ইনডেন্ট বা অন্যান্য কোড পুনর্নির্মাণ সরঞ্জামগুলির মাধ্যমে তাদের কোড বা এটির কিছু অংশ চালাতে ব্যবহার করে ।
:r!
এবং !
কমান্ডগুলি ব্যবহার করার অর্থ কোনও বাহ্যিক ইউটিলিটি বা ফিল্টারটি আমাদের সম্পাদকের এক্সটেনশন হিসাবে বিবেচনা করা যেতে পারে। আমি মাঝে মাঝে এগুলি স্ক্রিপ্টগুলির সাহায্যে ব্যবহার করেছি যেগুলি একটি ডেটাবেস থেকে ডেটা টেনে নিয়ে যায়, বা উইজেট বা লিনাক্স কমান্ডগুলির সাহায্যে যে কোনও ওয়েবসাইটকে ডেটা টেনে নিয়ে যায়, বা এসএসএস কমান্ড যা দূরবর্তী সিস্টেম থেকে ডেটা টেনে নিয়ে যায়।
আরেকটি দরকারী প্রাক্তন কমান্ড হ'ল :so
(সংক্ষিপ্ত :source
)। এটি কমান্ডের সিরিজ হিসাবে কোনও ফাইলের বিষয়বস্তু পড়তে পারে। আপনি যখন ভিআই শুরু করেন এটি সাধারণত, অন্তর্নিহিতভাবে, একটি ফাইল সম্পাদন :source
করে ~/.exinitrc
(এবং ভিম সাধারণত এটি করেন ~/.vimrc
, স্বাভাবিকভাবেই যথেষ্ট)। এর ব্যবহার হ'ল আপনি ম্যাক্রোস, সংক্ষিপ্তসারগুলি এবং সম্পাদকীয় সেটিংসের নতুন সেটটিতে স্যুরসিং করে ফ্লাইটে আপনার সম্পাদক প্রোফাইল পরিবর্তন করতে পারেন। আপনি যদি চুপচাপ হন তবে আপনি চাহিদা অনুযায়ী ফাইলগুলিতে প্রয়োগ করার জন্য প্রাক্তন সম্পাদনা কমান্ডের ক্রমগুলি সংরক্ষণ করার কৌশল হিসাবে এটি ব্যবহার করতে পারেন ।
উদাহরণস্বরূপ আমার কাছে একটি সাত লাইনের ফাইল (৩ characters টি অক্ষর) রয়েছে যা ডাব্লু ভিসির মাধ্যমে একটি ফাইল চালায় এবং সেই শব্দ গণনা ডেটাযুক্ত ফাইলের শীর্ষে একটি সি-স্টাইল মন্তব্য সন্নিবেশ করান। আমি এই "ম্যাক্রো" কে একটি ফাইলের মতো কমান্ড ব্যবহার করে প্রয়োগ করতে পারি:vim +'so mymacro.ex' ./mytarget
( Vi এবং Vim- র+
কমান্ড লাইন বিকল্পটি সাধারণত নির্দিষ্ট রেখা সংখ্যায় সম্পাদনা অধিবেশন শুরু করতে ব্যবহৃত হয়। তবে এটি একটি সামান্য জ্ঞাত সত্য যে কোনও বৈধ প্রাক্তন কমান্ড / এক্সপ্রেশন যেমন কোনও "উত্স" কমান্ড অনুসরণ করতে পারে আমি এখানে করেছি; একটি সাধারণ উদাহরণের জন্য আমার কাছে স্ক্রিপ্ট রয়েছে যা অনুরোধ করে: আমার এসএসএইচ পরিচিত হোস্টগুলি অ-ইন্টারেক্টিভ ফাইল থেকে একটি এন্ট্রি সরিয়ে ফেলার জন্য যখন আমি সার্ভারের একটি সেট পুনরায় ইমেজ করি।+
vi +'/foo/d|wq!' ~/.ssh/known_hosts
সাধারণত এটা যেমন "ম্যাক্রো" পার্ল, awk ব্যবহার লিখতে পর্যন্ত সহজ sed (যা, আসলে, মত , grep একটি দ্বারা অনুপ্রাণিত ইউটিলিটি ইডি কমান্ড)।
@
কমান্ড সম্ভবত সবচেয়ে অস্পষ্ট ষষ্ঠ কমান্ড। মাঝেমধ্যে প্রায় এক দশক ধরে অ্যাডভান্স সিস্টেম সিস্টেম অ্যাডমিনিস্ট্রেশন কোর্স পড়ানোর সময় আমি খুব কম লোকের সাথে দেখা করেছি যারা এটি কখনও ব্যবহার করেনি। @
কোনও রেজিস্ট্রারের বিষয়বস্তুগুলি কার্যকর করে যেমন এটি কোনও vi বা প্রাক্তন কমান্ড।
উদাহরণ: আমি প্রায়শই ব্যবহার করি: :r!locate ...
আমার সিস্টেমে কিছু ফাইল সন্ধান করতে এবং এটির নামটি আমার নথিতে পড়তে। থেকে সেখানে আমি ফাইল আমি কাঠখড় পোড়ানো হয়। বরং আগ্রহী একমাত্র সম্পূর্ণ পথ ছাড়ার কোনো বিদেশী হিট মুছুন, Tabপথের প্রতিটি উপাদানের (অথবা মাধ্যমে -ing খারাপ, আমি যদি ট্যাব সমাপ্তির সমর্থন ছাড়া একটি মেশিনে আটকে যেতে ঘটতে এর vi এর অনুলিপিটিতে ) আমি কেবল ব্যবহার করি:
0i:r
(বর্তমান লাইনটিকে বৈধ : r কমান্ডে রূপান্তর করতে ),
"cdd
("গ" রেজিস্টারে লাইনটি মুছতে) এবং
@c
এই আদেশটি কার্যকর করুন।
এটি কেবলমাত্র 10 টি কীস্ট্রোক (এবং অভিব্যক্তিটি "cdd
@c
কার্যকরভাবে আমার জন্য একটি আঙুলের ম্যাক্রো, তাই আমি এটি প্রায় কোনও সাধারণ ছয় অক্ষরের শব্দের প্রায় দ্রুত টাইপ করতে পারি)।
একটি স্বচ্ছল চিন্তা
আমি কেবলমাত্র vi এর শক্তির তলদেশে আছড়ে পড়েছি এবং আমি এখানে যা বর্ণনা করেছি তার একটিও "উন্নতি" এর অংশ নয় যার জন্য ভিম নামকরণ করা হয়েছে! আমি এখানে যা বর্ণনা করেছি তার সমস্তই 20 বা 30 বছর আগের vi এর কোনও পুরানো অনুলিপিটিতে কাজ করা উচিত ।
এমন সব লোকজন যথেষ্ট বেশি ব্যবহার করেছেন হয় ষষ্ঠ চেয়ে আমি কখনো হবে এর শক্তি।