যদিও আমি অস্বীকার করতে পারি না যে আমিও প্রথম দিকে vi এর সাথে লড়াই করেছি, আমি মনে করি যে একটি যুক্তি তৈরি করা যেতে পারে যে vi সত্যই শিখতে খুব সহজ। (আমি যখন ইউনিক্স ব্যবহার করা শুরু করি তখন তা vi বা ইম্যাকস ছিল, তাই আমি এডটি বেছে নেওয়ার সময় খুব সাধারণ লাইন সম্পাদক হলাম, যা আমি ইউনিক্সের প্রথম দিকের পাঠ্যপুস্তকগুলি পড়া থেকে ইতিমধ্যে শিখেছিলাম)) আমি প্রতিদিন vi ব্যবহার করি, তবে আমি সম্ভবত ব্যবহার করি এর বৈশিষ্ট্যগুলির মধ্যে একটি খুব ছোট উপসেট ব্যবহার করুন।
এখানে প্রথমে vi: vi ব্যবহারের জন্য একটি যুক্তি এখানে সমস্ত সিস্টেমে বিদ্যমান রয়েছে, খুব অল্প সংস্থান ব্যবহার করে এবং অস্থির এবং ধীর সংযোগের ক্ষেত্রে ব্যবহারযোগ্য হতে পারে, যেখানে অন্যান্য সম্পাদক ব্যর্থ হতে পারে বা ধীর এবং অকেজো হতে পারে। অথবা সিস্টেমটি ভাঙ্গা অবস্থায়, তাই তীর কীগুলি সঠিকভাবে ব্যাখ্যা করা যায় না (উদাহরণস্বরূপ খারাপ টার্মিনো সেটিংস।) সুতরাং ভিআই সমস্যাটি দ্বারা প্রভাবিত না হয়ে সমস্যাটির দিকে পরিচালিত কনফিগারেশন ফাইলগুলি ঠিক করতে ব্যবহার করা যেতে পারে।
এবং এখানে vi এর দরকারী উপসেটটি কীভাবে শিখতে হবে তা: প্রথম: vi কে একটি ইন্টারেক্টিভ, টার্মিনাল-জিইউআই "সম্পাদক" হিসাবে ভাবা বন্ধ করুন এবং পাঠ্য ফাইলগুলিতে হস্তক্ষেপের জন্য প্রোগ্রামিং ভাষা হিসাবে এটি দেখুন। শুরুর দিকে "vi" ভিশুয়াল মোডের জন্য দাঁড়িয়েছিল এবং vi এর একটি অবিবাহিত অংশ রয়েছে, যা শুরু করার জন্য ভাল জায়গা। শেল প্রম্পটে প্রাক্তন টাইপ করুন (আমি প্রত্যাবর্তনের প্রতিনিধিত্ব করতে ¬ ব্যবহার করব):
$ ex¬
Entering Ex mode. Type "visual" to go to Normal mode.
:
এখন এন্টার টিপুন।
:¬
E749: empty buffer
:
সুতরাং, এর কিছু রাখা যাক। "A¬" টাইপ করুন এবং পাঠ্যের একটি লাইন টাইপ করুন, তারপরে নিজেই একটি লাইনে একটি সময়কাল:
:a¬
Hello World¬
.¬
:
এটাই ছিল অ্যাপেন্ড কমান্ড। সহজ, সংক্ষিপ্ত এবং স্মরণীয়। তবে বাফারে কী আছে তা দেখে ভাল লাগবে:
:%p¬
Hello World
:
এটি ছিল প্রিন্ট কমান্ড, স্পষ্টতই। % একটি লাইন রেঞ্জ শর্টহ্যান্ড hand প্রতিটি কমান্ডের পূর্বে একটি লাইন নম্বর বা ব্যাপ্তি থাকতে পারে যা কমান্ডটি প্রয়োগ করা উচিত। % এর অর্থ "সমস্ত লাইন"। $ এর অর্থ শেষ লাইন এবং একটি সময়কালের অর্থ বর্তমান রেখা। একটি সংখ্যা মানে সেই নির্দিষ্ট লাইন। একটি রেঞ্জ এন, মি এবং একটি সংখ্যার যোগ বা বিয়োগ করা যেতে পারে, সুতরাং + 1, $ - 1 পরবর্তী লাইন থেকে দ্বিতীয়-শেষ লাইনে দাঁড়াবে। কেবল একটি লাইন সংখ্যা সমন্বিত একটি কমান্ড সেই লাইনে যায়। আমি ব্যবহার করি কমান্ডগুলির অবশিষ্ট ছোট ছোট উপসেট এখানে:
:1i¬
this text is inserted before line 1.¬
.¬
:
:w /tmp/filename¬
"/tmp/filename" [New] 2L, 49C written
:
ডাব্লু একটি ফাইলের জন্য সমস্ত (বা নির্বাচিত পরিসীমা) লাইন লিখেছে।
:1d¬
লাইন 1 মোছা।
:.s/Hello/Hello,/¬
Hello, World
:.s/$/!/¬
Hello, World!
গুলি একটি নিয়মিত ভাব প্রকাশ করে। নিয়মিত এক্সপ্রেশন জেনে রাখা ভাল!
:q¬
E37: No write since last change (add ! to override)
q ত্যাগ। ডাব্লিউকিউ লিখেছেন এবং ছাড়েন। কুই! না লিখে ছাড়েন, এবং অনুরূপ শিরাতে, ডাব্লু! সম্ভব হলে একটি ফাইলকে লেখার জন্য চাপ দেয়।
এখন একটি দুর্দান্ত:
:p
Hello, World!
:.!tr a-z A-Z
:p
HELLO, WORLD!
! কমান্ড যেমন শেল কমান্ডে লাইনগুলি ফিল্টার করে।
এবং পরিশেষে:
:vi¬
ভিজুয়াল মোডে প্রবেশ করে। বোকা বানাবেন না। এটি একটি সম্পাদকের মতো দেখাচ্ছে তবে এটি এখনও একটি ইন্টারেক্টিভ প্রোগ্রামিং শেল। আপনি কেবল সমস্ত সময় বাফার এবং আরও কয়েকটি কমান্ড সন্ধান করতে পারেন। ভিজ্যুয়াল মোডে a: প্রাক্তন মোড থেকে প্রম্পট প্রদর্শন করে। তীর কীগুলি (যদি তারা কাজ করে) চারদিকে ঘোরে এবং যদি তা না করে তবে hjkl! h বাম, জ নীচে, কে উপরে এবং আমি ডানদিকে। 0 প্রথম অক্ষর এবং ^ (এখানে পুনরায় মনে করুন!) লাইনের প্রথম অ-স্থান অক্ষরে চলে যায়। $ (আবার রেজেক্স!) লাইনের শেষে চলে যায়। টাইপিং: 999¬ প্রাক্তন মোডের মতো স্বাভাবিকভাবেই 999 লাইনে যায়।
"আমি" সন্নিবেশ মোডে প্রবেশ করে, যা এখন লাইনের পরিবর্তে অক্ষরগুলিতে সন্নিবেশ করায় এবং ".¬" এর পরিবর্তে অব্যাহতি টিপে শেষ হয়। শুরুতে "আমি" সন্নিবেশ করানো হয়, কার্সারের নীচে অক্ষরের পরে "ক" এবং বর্তমান রেখার শেষে "এ" " পাঠ্য টাইপ করার পরে সর্বদা পালাতে চাপুন। "x" কার্সারের নীচে অক্ষর মুছে ফেলে এবং "D" কার্সার থেকে লাইন শেষ পর্যন্ত মুছে দেয়। "Y" ইয়াঙ্কস (অনুলিপিগুলি) বর্তমান লাইনটি এবং "পি" এটিকে পেস্ট করে। ": পু" একই কাজ করে তবে এর আগে একটি লাইন সংখ্যা দ্বারা আগে করা যেতে পারে। ": ya" হ'ল "Y" এর প্রাক্তন সমতুল্য এবং আবারও রেখার ব্যাপ্তিতে প্রয়োগ করতে দরকারী। আমি মনে করি একটি মার্ক কমান্ডও আছে, তবে আমি স্বীকার করব আমি এটি মনে করি না। আমি এটা মিস করি না।
উপরেরটি আমি ব্যবহার করি এবং আমি জানি আমি সম্ভবত খুব "দক্ষ" ভিআই ব্যবহারকারী নই user অন্যদিকে, আমি প্রাক্তনের বহুমুখিতা ব্যবহার করি, উদাহরণস্বরূপ স্ক্রিপ্ট সম্পাদনা কনফিগারেশন ফাইলগুলিতে। আপনার হোস্টনাম foo.bar.com পরিবর্তন করা দরকার?
for file in conf/*
do (echo "%s/foo.bar.com/www.foobar.com/" ; echo "wq") |ex $file ; done
আমি যা বলতে চাইছি তা হ'ল, আমি মনে করি ভি এর সাথে সমস্যা হ'ল লোকে এটিকে একটি কঠিন সম্পাদক হিসাবে মনে করে। এটির যা দরকার তা হ'ল আপনার মানসিকতাটি একটু পরিবর্তন করা, এবং এটিকে পরিবর্তে খুব সাধারণ এমনকি খুব শক্তিশালী ইন্টারেক্টিভ প্রোগ্রামিং ভাষা হিসাবে দেখা। এত শক্তিশালী যে উপলভ্য কমান্ডগুলির একটি উপসেট থাকা সত্ত্বেও, আপনি এটিকে দুর্দান্ত প্রভাব হিসাবে ব্যবহার করতে পারেন - কেবল সম্পাদক হিসাবে নয়, সাধারণ হিসাবে, স্ক্রিপ্টযোগ্য সরঞ্জামটি ইউনিক্সের বাকী অংশগুলির সাথে ভালভাবে সংহত হয়েছে। আমি সন্দেহ করি ন্যানো এগুলি সমস্ত কিছু করবে - ইম্যাক্স ... সম্ভবত।