ইউনিক্সে শেল কমান্ড সম্পাদনা করতে VI কী ব্যবহার করা


28

আমার এক সহকর্মী থাকত যিনি ইউনিক্সে সত্যই ভাল ছিলেন good

তিনি আমার শেল কমান্ডগুলি সম্পাদনা করতে কীভাবে কী কী বাইন্ডিং ব্যবহার করবেন তা আমাকে দেখিয়েছিলেন showed

আমি যখনই লগ ইন করতাম ততবার দৌড় দিয়ে একটি ফাইলের মধ্যে সে কমান্ডটি রেখেছিল।

সেই থেকে, আমি একটি অন্য প্রকল্পে চলে এসেছি।

দুর্ভাগ্যক্রমে আমি কীভাবে এটি সেট আপ করব তা মনে নেই।

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

আমি কীভাবে সেই সেটিং স্থায়ী করতে পারি?

উত্তর:


31

আপনি সর্বকালের বৃহত্তম বৈশিষ্ট্যটির কথা বলছেন!

আপনি নিজের .bashrcফাইলটিতে এটি যুক্ত করে শেল কমান্ডগুলি (এবং কমান্ডের ইতিহাস) সম্পাদনা করতে vi কমান্ডগুলি ব্যবহার করতে পারেন :

set -o vi

আপনি কেবলমাত্র আপনার বর্তমান অধিবেশনকে প্রভাবিত করতে আপনি কমান্ড লাইন থেকে এই আদেশটি চালাতে পারেন।

আপনি যদি ব্যাশ ব্যবহার না করেন তবে আপনার শেলের জন্য উপযুক্ত আরসি ফাইলটি প্রতিস্থাপন করুন।


এটি আপনাকে কোনও কমান্ড সম্পাদনা করতে vi কমান্ড ব্যবহার করতে দেয় ...

আপনি ব্যবহার করতে পারেন jএবং kআপনার ইতিহাসের মাধ্যমে সরানোর জন্য (টিপানোর পরে ESC)।

আপনি পুরানো কমান্ডগুলি অনুসন্ধান করতে /(আঘাত ESCকরার পরে ) ও ব্যবহার করতে পারেন ।

অন্য কথায়, cpদশ মিনিট আগে আপনি যে দুর্দান্ত দীর্ঘ আদেশটি করেছিলেন তা সন্ধান করতে:

ESC/CPENTER

তারপরে আপনি nএবং এর সাথে আপনার ইতিহাসের সমস্ত মিলে যাওয়া আদেশগুলি সাইকেল করতে পারেন N

এগুলি আমাকে কমান্ড লাইনে 10 ট্রিলিয়ন গুণ বেশি উত্পাদনশীল করে তুলেছে!


4
ঠিক আছে, এটি সত্যই vi ব্যবহার করে না, এটি লাইন সম্পাদনার জন্য ভাই-স্টাইল কীবোর্ড কমান্ড ব্যবহার করে।

4
অবশ্যই ... আমি অনুমান করি যে উপযুক্ত পরিভাষাটি হ'ল এটি vi bindings in the shellএখন পর্যন্ত সর্বাধিক বৈশিষ্ট্যযুক্ত!
jahroy

মোডটি প্রদর্শনের কোনও উপায় থাকলে আমি ইমাস বাইন্ডিংগুলি থেকে vi বাইন্ডিংগুলিতে স্যুইচ করব। আপনি কি এটি করার একটি উপায় জানেন?
আইকনোক্লাস্ট

ওরাও ওখানে জুড়তে অনুমতি একটি উপায় jjসঙ্গে ESCযেমন আমরা সাধারণত তেজ না?
স্টিভিয়াং

@yangchenyun - হয়তো এই প্রশ্ন যে সাহায্য করবে: stackoverflow.com/questions/844862/... আমি ব্যক্তিগতভাবে বেঁধে / কমান্ড কোনো পরিবর্তন নেই, তাই আমি পুরোপুরি নিশ্চিত কি তুমি জিজ্ঞেস করছি।
jahroy

12

আপনি যদি ব্যাশ ব্যবহার করছেন, যেমন জহরোয় এবং অশুভ অটো ইতিমধ্যে জবাব দিয়েছে, আপনি ব্যবহার করতে পারেন

set -o vi

বাশকে ভিআই-স্টাইল সম্পাদনা কমান্ডগুলি ব্যবহার করতে সহায়তা করবে।

একবার এটি হয়ে গেলে, আপনি Esc vবর্তমান কমান্ড লাইনের একটি অনুলিপি সহ একটি অস্থায়ী ফাইল সহ vi সম্পাদক চালু করতে টাইপ করতে পারেন । আপনি কমান্ডটি সম্পাদনা করতে পারেন, এমনকি একাধিক লাইনের সাথে এটি প্রতিস্থাপন করতে পারেন; আপনি যখন ফাইলটি সংরক্ষণ করেন :wq), শেলটি সম্পাদিত আদেশগুলি কার্যকর করবে exec

যদি আপনি পছন্দ করেন

set -o emacs

আপনি Ctl-XCtl-Eএকই জিনিস করতে ব্যবহার করতে পারেন । এটি আপনার পছন্দসই সম্পাদকটি ব্যবহার করবে $EDITOR, প্রয়োজনে ইম্যাক্স নয়।

(ব্যক্তিগতভাবে, আমি আমার বেশিরভাগ সম্পাদনার জন্য vi (প্রকৃতপক্ষে vim) ব্যবহার করি তবে আমি set -o emacsশেলটিতে পছন্দ করি ; ফাইল সম্পাদনা করার জন্য সন্নিবেশ মোডে এবং বাইরে স্যুইচ করা দুর্দান্ত তবে ইন্টারেক্টিভ কমান্ডের জন্য বিশ্রী ward


দ্বিগুণ শৈলী এড়ানো স্বাভাবিক সম্পাদনা মোডে ফিরে আসার উপায়টি কি আপনি জানেন? আমি মনে করি ব্ল নমের সাথে সাফল্য এসেছে, তবে এখন আর নেই; আমি কি মিস করছি?
পিয়ের্তোনি

@ পিয়ারটনি: set -o emacsআপনি যা চান তা করেন না?
কিথ থম্পসন

হ্যাঁ, এটি কাজ করে, আমি বিন্দুটি মিস করেছি, ধন্যবাদ
পিয়ার্তোনি

10

আপনি set -o vi@ জহরয়ে পোস্ট করা হিসাবে আপনার লাইন সম্পাদনা কমান্ডগুলি পরিবর্তন করতে ব্যবহার করতে পারেন , তবে আপনি fcকমান্ডটি সম্পর্কে ভাবছেন ( ব্যাশে উপলব্ধ এবং আমি মনে করি ksh, তবে সম্ভবত tcsh নয়), যা পূর্ববর্তী কমান্ডটিকে একটি সম্পাদক (এফসিইডিআইটি বা এডিটর) হিসাবে স্থাপন করবে , যা আপনি সম্ভবত vi তে সেট করেছেন) এবং তারপরে সম্পাদক থেকে প্রস্থান করার সময় কমান্ডটি কার্যকর করে। ম্যানপেজ বা help fcবিশদ জন্য দেখুন, বা এটি চেষ্টা করে দেখুন।


5
alias r='fc -e -'পূর্ববর্তী কমান্ডগুলি পুনরায় চালিত করার জন্য একটি মূল্যবান নাম। fcএর নিজের থেকেই কার্ন শেল থেকে উদ্ভূত, আমি বিশ্বাস করি। আপনি সংখ্যা দ্বারা আদেশগুলি নির্দিষ্ট করতে পারেন ( fc 123 129ইতিহাসে কমান্ড সংখ্যা 123 থেকে 129 সম্পাদনা করতে)। আপনি আপেক্ষিক নম্বরগুলি নির্দিষ্ট করতে পারেন ( fc -10 -1প্রবেশ করা শেষ 10 টি কমান্ড সম্পাদনা করতে)। আপনি এর সাথে পূর্ববর্তী আদেশগুলি তালিকাভুক্ত করতে পারেন fc -l। আপনি rউপনামের সাথে উপসর্গ দ্বারা একটি আদেশ সুনির্দিষ্ট করতে পারেন ( r makeএর সর্বশেষ আহ্বানটি চালায় make; তাই r mআপনি mvযদি শেষ দৌড়ানোর সময় থেকে কোনও আদেশ না চালিয়ে থাকেন make, ইত্যাদি)।
জোনাথন লেফলার

6

ভিএম-এ সর্বাধিক ব্যবহৃত কমান্ড সম্পাদনা করতে এবং সম্পাদক সংরক্ষণ এবং প্রস্থানের পরে সম্পাদিত সংস্করণটি আহ্বান করতে fcশেল বিল্ট-ইন ব্যবহার করুন । কোনও যুক্তি ছাড়াই এটি নিম্নলিখিতটি করবে:

  1. এতে একটি অস্থায়ী ফাইল তৈরি করে /tmpএবং এটিকে সর্বাধিক টাইপ করা কমান্ড দিয়ে পপুলেট করে
  2. সম্পাদক সাধারণত প্রস্থান করার পরে (প্রস্থান কোড 0 সহ) এটি অস্থায়ী ফাইলে পাওয়া কমান্ড কার্যকর করে এবং এই ফাইলটি সরিয়ে দেয়। সম্পাদিত সংস্করণ ইতিহাসে একটি সাধারণ কমান্ড হিসাবে সংরক্ষণ করা হয় (কমপক্ষে zsh এ)। এটি সম্পাদনকারী কোডটি অন্য শূন্য সহ প্রস্থান করে থাকলে কিছুই কার্যকর করে না (উইম এটিকে হত্যা করে বা ব্যবহারের মাধ্যমে অর্জন করা যেতে পারে :cquit)।

কমান্ড বাশ এবং zsh উভয় ক্ষেত্রেই কাজ করে।


5

প্রকৃতপক্ষে, এটি আসলে সবচেয়ে বড় বৈশিষ্ট্য। আরও কিছু আছে:

নামে একটি ফাইল তৈরি করুন

.editrc

লাইন থাকা

bind -v

এডিটলাইন , একটি BSD লাইসেন্সযুক্ত সংস্করণ লাইব্রেরি যা পঠন-সদৃশ পরিষেবাদি সরবরাহ করে। যে .editrc মাইএসকিউএল এর কমান্ড লাইন শেল, বা রিডলাইন ব্যবহার না করে এমন কোনও অ্যাপ্লিকেশন আপনার কী বাইন্ডিংগুলিকে vi মোডে সেট করবে।

বছরের পর বছরগুলি আমি কিছুটা ভুলে যেতে পেরেছি, সুতরাং আমার .zshrc ভিআই মোডের জন্য কিছু মোড়কের সূত্র ধরে, কমান্ড লাইনে আমি কী মোডে আছি তা দেখানোর জন্য। এটা সুন্দর.

আমি জেডএসে জানি আপনি টাইপ করতে পারেন

bindkey -L

এবং কী-বাইন্ডিংগুলির তালিকা পান। আমি নিশ্চিত বাশের অবশ্যই কিছু মিল থাকতে হবে। সমস্ত vi কী সমস্ত ডিফল্টরূপে আবদ্ধ হয় না। আপনি কীভাবে উপযুক্ত দেখেন তা বেঁধে রাখুন এবং আপনি ঘোড়দৌড়ের দিকে।


আশা করি আমি মাইএসকিউএল-তে বাই বাইন্ডিংয়ের জন্য এটি 5 বার উপার্জন করতে পারতাম!
jahroy

1

আপনার টার্মিনালে টাইপ করুন export EDITOR=vi

এই সেটিংটি সংরক্ষণ করতে। line /। প্রোফাইল ফাইলটিতে এই লাইনটি রাখুন


5
এটি আপনার ডিফল্ট সম্পাদককে (সেই আদেশের জন্য মনোযোগ দেয় $EDITOR) সেট করে vi। এটি আপনাকে শেল কমান্ডগুলি সম্পাদন করতে দেয় না vi(কমপক্ষে সরাসরি নয়)।
কিথ থমসন

2
@KeithThompson Zsh অক্ষমতা সম্পাদনা মোড যদি vi থেকে $EDITORধারণ করে vi। আমি মনে করি এটিই একমাত্র শেল যা এটি করে।
গিলস 23'৩৩
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.