শেল বলতে "ভিআই" মোড বা "ইম্যাকস" মোডে কী বোঝায়?


32

এই প্রশ্নটি সরাসরি উত্তর থেকে অনুসরণ করে । এক্ষেত্রে আমি বিশেষভাবে সেই অংশটি বুঝতে অক্ষম, যা বলে:

সেই ক্ষেত্রে, এর আচরণ ইশাসের কাছাকাছি 'বাশ (পাঠ্যসূত্র) / ksh / zsh ইম্যাক্স মোডের চেয়ে বেশি, তবে টার্মিনাল ড্রাইভার এম্বেডড লাইন সম্পাদক (ক্যানোনিকাল মোডে) থেকে প্রস্থান করে, যেখানে Ctrl-Wপূর্ববর্তী শব্দটি মুছে ফেলা হয় (উইরেজ, এছাড়াও vi) )।

এখানে আমরা শেলগুলি সম্পর্কে কথা বলছি এবং সম্পাদক নয় যা দুটি সম্পূর্ণ ভিন্ন প্রোগ্রাম। শেলটি কিছু সম্পাদক মোডে বলতে কী বোঝায়?

পিএস: আপনি নিজের উত্তরটি এমন ভিত্তিতে তৈরি করতে পারেন যে আমি বুঝতে পারি যে শেল কী এবং কীভাবে বেসিক সম্পাদনার জন্য ভিএম ব্যবহার করতে হয়।


এটি প্রতি সেফ কোর শেল কার্যকারিতা সম্পর্কে নয়, লাইন সম্পাদনা সম্পর্কে (আপনি টাইপ করার সময় আপনি কী করেন এবং ফিরে যান এবং নিজেকে সংশোধন করেন)।
এন। 'সর্বনাম' মি।

উত্তর:


27

"Vi" মোডে আপনি vi সম্পাদকের লাইনের মতো বর্তমান শেল প্রম্পটে সম্পাদনা / নেভিগেট করতে পারেন। আপনি এটিকে এক-লাইন পাঠ্য ফাইলের মতো দেখতে পারেন। আনুষাঙ্গিকভাবে "emacs" মোডে আপনি Emacs এর শর্টকাটগুলির কিছু ব্যবহার করে বর্তমান কমান্ড লাইনটি সম্পাদনা / নেভিগেট করতে পারেন।

উদাহরণ

উদাহরণস্বরূপ, ভিআই-মোডে আপনি যেমন কিছু করতে পারেন (ব্যাশে):

$ set -o vi
$ ls hello world
<ESC>
bbdw # results in
$ ls world

ইমাকস-মোডে আপনি একটি লাইনের শুরুতে (vi: + , বা , ) লাফ দেওয়ার জন্য যেমন Ctrl+ টিপুন । আপনি (ব্যাশ, ksh, zsh ইত্যাদি) এর মাধ্যমে ইম্যাক্স মোডটি চালু করতে পারেন ।ACtrl[0ESC0set -o emacs

Readline

প্রচুর ইন্টারেক্টিভ কমান্ড লাইন প্রোগ্রাম ( বাশ সহ ) রিডলাইন লাইব্রেরি ব্যবহার করে । সুতরাং, আপনি কোন ইনপুট মোড (vi বা emacs) এবং অন্যান্য বিকল্পগুলি এক জায়গায় ব্যবহার করতে পারবেন তা যেমন কনফিগার করতে পারেন যে রিডলাইন ব্যবহার করে প্রতিটি প্রোগ্রামের ঠিক একই সম্পাদনা / নেভিগেট ইন্টারফেস থাকে।

উদাহরণস্বরূপ আমার রিডলাইন কনফিগারেশন দেখে মনে হচ্ছে:

$ cat ~/.inputrc 
set editing-mode vi
set blink-matching-paren on

উদাহরণস্বরূপ zsh / ksh আমার জানা মতে রিডলাইন ব্যবহার করে না, তবে vi / emacs মোডগুলিকে সমর্থন করে যা খুব বেশি বাশ / পঠনের লাইনের মতো।

অবশ্যই, একটি কমান্ড লাইনের শেলটিতে থাকা vi / emacs মোডটি সম্পূর্ণ সম্পাদক বৈশিষ্ট্যের সেটটির একটি উপসেট। কমান্ড লাইন শেলটিতে প্রতিটি বৈশিষ্ট্য উপলব্ধি করে না এবং কিছু বৈশিষ্ট্য অন্যদের তুলনায় সমর্থন করা আরও জটিল।

ক্যানোনিকাল মোড

ইন্টারেক্টিভ কমান্ড লাইন শেলগুলির vi / emacs মোডগুলি আবিষ্কার করার আগে আপনার শেলটি আপনার টার্মিনালের কেবলমাত্র মোড ব্যবহার করবে যা কেবলমাত্র সম্পাদনা কমান্ডের একটি সীমিত সেট সরবরাহ করে (যেমন শেষ শব্দটি মুছতে Ctrl+W


ধরুন আমি জানি না আমি কোন ইনপুট মোডে আছি। আমি কি কিছু পাঠ্য প্রবেশ করে যাচাই করতে পারি এবং [Ctrl] + [A] টিপতে পারি? যদি কার্সারটি এর ইমাস শুরু করে তবে তা vi?
লিমোবালা

2
@ লিমোওয়ালা, একটি ভাল অনুমান করা উচিত। আপনার শেলের উপর নির্ভর করে - যদি সিটিএল + এ কাজ না করে তবে অন্য সম্ভাবনাটি হ'ল আপনার শেলটিতে কোনও সম্পাদনা মোড অন্তর্ভুক্ত নয়। সম্ভবত কিছু শেল অন্যান্য সম্পাদনা মোডগুলিও প্রয়োগ করে। তবে অনুশীলনে আপনার পদ্ধতিটি যথেষ্ট ভাল হওয়া উচিত। আরও নিশ্চিত হওয়ার জন্য আপনি এর পরে কোনও vi কমান্ড দিয়েও পরীক্ষা করতে পারেন। ব্যাশে আপনিও এর মতো কিছু ব্যবহার করতে পারেন set -o | grep 'emacs\|vi'। Zsh এ (যেখানে আমার কাছে ভিআই-মোড রয়েছে) এটি কার্যকর হয় না।
maxschlepzig

বাইন্ড-পি কোন মোডে রয়েছে তার ভাল ইঙ্গিত দেবে
পল

23

আপনি লক্ষ্য করবেন যে আপনি যখন catকোনও টার্মিনালে শেল প্রম্পটে চালাবেন , catস্টিডিনের কাছ থেকে যা পড়ে তা স্টডআউটকে লিখতে হবে এবং টিপতে হবে a, আপনি aটার্মিনাল ড্রাইভারের দ্বারা প্রতিধ্বনিত দেখতে পাবেন , তবে সেটি catলিখবে না a(আপনি দেখতে পাচ্ছেন) শুধুমাত্র একটি a, টার্মিনাল ড্রাইভার দ্বারা প্রতিধ্বনিত)।

তবে, আপনি যদি টাইপ করেন তবে আপনি আউটপুটিং a Backspace b Enterদেখতে পাবেন না , তবে ( এবং নিউলাইন)।cata\010b\015b\012b

কারণ টার্মিনাল ড্রাইভার (আমরা কার্নেলের মধ্যে সফ্টওয়্যারটির সাথে কথা বলছি, টার্মিনাল এমুলেটরের মতো নয় xterm) ক্যানোনিকাল মোডে থাকা অবস্থায় খুব বেসিক লাইন এডিটর প্রয়োগ করে। টার্মিনাল ড্রাইভারটি কমান্ড ব্যবহার করার মতো সিস্টেম কল ব্যবহার করে কনফিগার করা যায় । উদাহরণস্বরূপ, ক্যানোনিকাল মোডটি ছেড়ে যেতে, আপনি এটি করতে পারেন । যদি তুমি করো:ioctl()sttystty -icanon

stty -icanon; cat

তারপরে, আপনি একই সাথে echo(যা দিয়ে আপনি অক্ষম করতে পারতেন stty -echo) এবং catআউটপুট উভয়ই দেখতে পাবেন ।

সেই সম্পাদক একজন লাইন সম্পাদক। এটি, চাপ দেওয়ার পরে টার্মিনাল ডিভাইসটি পড়ার অ্যাপ্লিকেশনটিতে প্রেরণ না করা পর্যন্ত এটি ব্যবহারকারীকে এক লাইনের পাঠ্য সম্পাদনা করতে পারে Enter

সেই সম্পাদকের সম্পাদনার ক্ষমতা খুব সীমাবদ্ধ। বেশিরভাগ বাস্তবায়নে, কেবলমাত্র 4 টি সম্পাদনা কী (আসলে অক্ষর) এর সাথে কনফিগারযোগ্য stty:

  • মুছুন ( ^Hবা ^?সাধারণত): পূর্বের অক্ষরটি মুছুন
  • হত্যা ( ^Uসাধারণত): খালি (হত্যা) লাইনটি এখনও প্রবেশ করেছে
  • werase ( ^W): পূর্ববর্তী শব্দটি মুছুন
  • lnext ( ^V): পরবর্তী অক্ষরটি অক্ষরে অক্ষরে প্রবেশ করান (উপরের সমস্তটির বিশেষ অর্থ বাতিল করুন)

পুরানো দিনগুলিতে, এমনটি ভাবা হয়েছিল যে টার্মিনাল ড্রাইভার লাইন সম্পাদককে ফ্যানসিয়ার ক্ষমতা সহ প্রসারিত করা হবে। এ কারণেই শেল প্রম্পটে প্রাথমিক শেলগুলির কোনওরই কোনও কমান্ড লাইন সম্পাদনা করার ক্ষমতা নেই ( catআমরা উপরের মতো চলার চেয়ে শেল প্রম্পটে একই লাইন সম্পাদনা ক্ষমতা পেতে চাই )।

যাইহোক, এটি সত্যিই কখনও ঘটেনি, সম্ভবত বিভিন্ন কারণে টার্মিনালগুলির সাথে গোলমাল হওয়া কিছু মূল চাপগুলিতে একই অক্ষরগুলি না পাঠানো হয়েছিল যা এটি স্পষ্ট করে দিয়েছিল যে এটি কার্নেল স্পেসে প্রয়োগ করা উচিত নয়।

সুতরাং কিছু শেলগুলি টার্মিনাল ড্রাইভারের ক্যানোনিকাল মোডটি ছেড়ে দেওয়া এবং তাদের নিজস্ব লাইন সম্পাদক প্রয়োগ করতে শুরু করে। সেই সময়ে emacsএবং viসম্পূর্ণ ভিন্ন কী বাঁধাই এবং অপারেশন মোড সহ সর্বাধিক জনপ্রিয় ভিজ্যুয়াল পাঠ্য সম্পাদক ছিলেন। ইন vi, আপনার কাছে পাঠ্য প্রবেশের জন্য একটি মোড এবং সম্পাদনার জন্য একটি মোড রয়েছে। ইন emacs, আপনি সর্বদা পাঠ্য মোডে প্রবেশ করছেন , তবে সম্পাদনা কী সংমিশ্রণগুলি ( ^bচরিত্রটিকে পিছনে সরানো পছন্দ করে) টিপুন দিয়ে সম্পন্ন করা হয় ।

শাঁসগুলির জন্য তাদের নিজস্ব কী কীভাবে বাধ্যতামূলক তা বজায় রাখা উচিত ছিল না। এটি হতাশার কারণ হ'ল লোকেরা ভিন্ন কিছু শিখতে পারে। তবে অন্যের থেকে একটি ( emacsবা vi) স্টাইল বেছে নেওয়া অন্য সম্পাদকটির ব্যবহারকারীদের বিচ্ছিন্ন করার একটি নিশ্চিত উপায় হতে পারে ।

Https://www.usenix.org/legacy/publications/library/proceedings/vhll/full_papers/korn.ksh.a অনুসারে :

Ksh এর জনপ্রিয় ইনলাইন সম্পাদনা বৈশিষ্ট্যগুলি (vi এবং ইমাকস মোড) বেল ল্যাবরেটরিজগুলিতে সফ্টওয়্যার বিকাশকারীদের দ্বারা তৈরি করা হয়েছিল; প্যাট সুলিভান দ্বারা ভিআই লাইন সম্পাদনা মোড এবং মাইক ভ্যাচের দ্বারা ইম্যাক্স লাইন সম্পাদনা মোড। এই বৈশিষ্ট্যগুলি যুক্ত করার জন্য প্রত্যেকে স্বতন্ত্রভাবে বোর্ন শেলটি সংশোধন করেছিল এবং উভয়ই এমন সংস্থায় ছিল যারা কেএসএস কেবল তখনই ব্যবহার করতে চাইত যখন কেএসএসের তাদের নিজস্ব ইনলাইন সম্পাদক থাকত। মূলত ksh এ কমান্ড লাইন সম্পাদনা যুক্ত করার ধারণাটি প্রত্যাখ্যান করা হয়েছিল যে লাইন সম্পাদনা টার্মিনাল ড্রাইভারের মধ্যে চলে যাবে। যাইহোক, যখন এটি স্পষ্ট হয়ে গেল যে খুব শীঘ্রই এটি হওয়ার সম্ভাবনা নেই, উভয় লাইন সম্পাদনা মোডগুলি কেএসএসে সংহত করে alচ্ছিকভাবে তৈরি করা হয়েছিল যাতে তারা এমন সিস্টেমে অক্ষম হতে পারে যা টার্মিনাল ইন্টারফেসের অংশ হিসাবে সম্পাদনা সরবরাহ করে।

সুতরাং পরিবর্তে, তারা উভয় এবং ব্যবহারকারীদের উভয়ের মধ্যে চয়ন করার জন্য একটি ইন্টারফেস প্রয়োগ করে। ksh80 এর দশকের গোড়ার দিকে সম্ভবত প্রথমটি ছিল (উপরে বর্ণিত বোর্ন শেলটিতে একটি ভিআই মোড এবং ইমাস মোড যুক্ত করার জন্য পৃথকভাবে লিখিত কোডটি পুনরায় ব্যবহার করা হয়েছিল) এর পরে tcsh( tcshপ্রথমে কেবল emacsকী বাঁধাই ছিল , viমোড পরে যুক্ত করা হয়েছিল) এবং পরে bashএবং zsh90 এর দশকের গোড়ার দিকে।

আপনি দুটি মোড মধ্যে সুইচ bash, zshঅথবা kshসঙ্গে set -o viবা set -o emacs, এবং bindkey -eঅথবা bindkey -vমধ্যে tcshবা zsh

POSIX আসলে নির্দিষ্ট করে viমোড এবং না emacsজন্য মোড sh(গল্প হয়েছে রিচার্ড স্টলম্যান উল্লেখ POSIX আপত্তি emacsজন্য মোডsh )।

জন্য ডিফল্ট মোড bash, পাবলিক ডোমেইন রুপভেদ ksh(pdksh, mksh, oksh), tcshএবং zshEmacs মোড (সঙ্গে যদিও zsh, এটা viযদি আপনার $EDITORহয় vi), এবং যেমন AT & T মধ্যে ksh, এটা বোবা মোড যদি না $EDITORবা $VISUALউল্লেখ viবা emacs

kshপরে gmacsগোসলিংয়ের ব্যবহারকারীদের আলাদাভাবে emacsহ্যান্ডেল করার জন্য একটি মোড যুক্ত করেছে Ctrl+T

এখন হ্যান্ডলিং ^Wমধ্যে emacsবা tcshEmacs মোড সম্ভবত চেয়েও পুরনো werase, টার্মিনাল লাইন সম্পাদকে চরিত্র তাই আমরা সত্যিই যে জন্য তাদের দোষারোপ করতে পারে না এবং আমার বিবৃতি "বিদায়ী ..." বিভ্রান্তিকর হিসেবে দেখা যেতে পারে। এটা ঠিক যে আমি এটা জ্বালাময় যখন পছন্দ খুঁজে এর emacs, tcshবা infoযখন আপনি টাইপ অন্য সব কিছু থেকে ভিন্নভাবে আচরণ Ctrl-W। আপনি কল্পনা করতে পারেন যে যখন আপনি টাইপ করার সাথে সাথে কিছু অ্যাপ্লিকেশনগুলি তাদের উইন্ডোটি বন্ধ করতে শুরু করেছে তখন আমি এটি আরও বেশি বিরক্তিকর পেয়েছি Ctrl-W


1
pdkshপ্রারম্ভকালে মোডগুলি $EDITORজন্য পার্স viএবং পরিবর্তন করে; আমি mkshএটিকে সরিয়ে দিয়েছি (বিশেষত যেভাবেই আমি কেবল ইমাস মোডটি বজায় রাখি)।
মীরাবিলোস

আপনাকে অনেক সংযোজন ধন্যবাদ, বিশেষত বিভিন্ন শেলের আচরণ এবং ইতিহাসের বিশদ আলোচনা দিয়ে with যে কাউকে নিয়মিত শেলগুলি দিয়ে আমি কনফিগার না করে বিভিন্ন ডিস্ট্রোসে নিয়মিতভাবে কাজ করা প্রয়োজন, এটি অসাধারণ সহায়ক।
ব্রাইকান

চমৎকার historicalতিহাসিক প্রসঙ্গে ধন্যবাদ। এটি অত্যন্ত দুঃখের বিষয় যে সেই সময়ে টার্মিনাল ড্রাইভারটিতে আরও পরিশীলিত ইনলাইন সম্পাদনা বৈশিষ্ট্য যুক্ত করা হয়নি। রিডলাইনের মতো লাইব্রেরিগুলিকে অন্তর্ভুক্ত করার জন্য প্রোগ্রামগুলির প্রয়োজন হবে না। আমিও ভেবেছিলাম যে ইমিক্স-মোডটি পসিক্সের দ্বারা নির্দিষ্ট করা হয়নি যাতে যুক্তির সাথে লিঙ্কটি আকর্ষণীয় ছিল। ( ^Wউইন্ডোজ বন্ধ করার সাথে সাথে আমিও হতাশাগুলি শেয়ার করি )।
অ্যান্টনি জি - মনিকার পক্ষে ন্যায়বিচার

1
@ অ্যান্থনি জিওগেন, আমাদের এখনও জ্লে / রিডলাইনের মতো জিনিসগুলির প্রয়োজন হবে কারণ টার্মিনাল ড্রাইভারটিতে ফাইলের নাম / কমান্ড সমাপ্তির মতো জিনিসগুলি সত্যিই করা যায়নি।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.