প্রাক্তন মোডের কোনও ব্যবহারিক ব্যবহার আছে?


115

ভিমের একটি প্রাক্তন মোড রয়েছে যা প্রবেশ করে প্রবেশ করা যায় Qএবং একটি কমান্ড লাইন মোড যা দিয়ে প্রবেশ করা যায় q:। নতুন ভিআইএম ব্যবহারকারীদের মধ্যে একটি সাধারণ অভিযোগ হ'ল ভিম ছাড়ার চেষ্টা করার সময় তারা ঘটনাক্রমে এই মোডগুলিতে প্রবেশ করে। এর ফলে, আমি ~/.vimrcদুর্ঘটনাক্রমে (বিশেষত q:) তাদের আঘাত করা বন্ধ করতে আমি এই কীগুলি অক্ষম করি :

map q: <Nop>
nnoremap Q <nop>

যদিও আমি প্রাক্তনে ভিম ডকুমেন্টেশনটি পড়েছি , আমি একজন পরিমিত অভিজ্ঞ ভিম ব্যবহারকারী এবং এর পিছনের মূল ধারণাটি বুঝতে পেরেছি, তবে এখনও আমি আমার প্রতিদিনের ভিমে ব্যবহারে এর জন্য কোনও ব্যবহার খুঁজে পাওয়ার জন্য সংগ্রাম করছি। :পরিবর্তনগুলি সরাসরি প্রতিধ্বনিত হয় না বলে সাধারণভাবে এটি প্রিফিক্সড স্ট্যান্ডার্ড ভিএম কমান্ড-লাইন কমান্ড প্রবেশ করানো থেকে কম দরকারী বলে মনে হয়।

প্রাক্তনের আধুনিক ভিমে কোনও ব্যবহারিক দৈনন্দিন ব্যবহার রয়েছে? প্রমিত মোডে স্ট্যান্ডার্ড কমান্ডের চেয়ে আরও সহজ কিছু কি সহজ? কমান্ড লাইন মোড এবং প্রাক্তন মোডের মধ্যে পার্থক্য কী?


13
Qএবং q:বেশ আলাদা। আপনি কেবল ডানদিকেই উল্লেখ করছেন Q?
জামেসান

@ জামেসান, আসলে দেখা যাচ্ছে যে আমি নিশ্চিত ছিলাম না ... আপনি ঠিক বলেছেন, তারা বিভিন্ন কাজ করে বলে মনে হচ্ছে, যদিও আমি ধরে নিয়েছিলাম যে তারা মূলত একই ছিল। আপনি যদি এই প্রশ্নের উত্তর দেন, তবে এটি স্পষ্ট করতে সাহায্য করবে, কারণ আমি স্পষ্টতই বিভ্রান্ত হয়েছি।
অ্যান্ড্রু ফেরিয়ার 5:25

এই প্রশ্নটি মেটা নিয়ে আলোচনা হচ্ছে ।
200_সাক্সেস

1
@ অ্যান্ড্রুফেরিয়ার আপনি q:বিশেষভাবে জিজ্ঞাসা করেছিলেন এবং দুটি কী অনুক্রমের মধ্যে এটির উল্লেখ করেছেন, যার মধ্যে আপনার সবচেয়ে বেশি সমস্যা রয়েছে। এবং এখানে দুটি উত্তর উত্তর হিসাবে সঠিক শব্দ দ্বারা এটি অনুসন্ধান করা লোকদের জন্য দরকারী হতে পারে।
র্যান্ডম 832

4
আপনি যখন কী করবেন q/এবং শিখবেন q:, আপনি সম্ভবত তাদেরকে ভিমের সবচেয়ে দরকারী কমান্ড বিবেচনা করবেন। এবং হ্যাঁ, আপনি কীভাবে এগুলি ব্যবহার করবেন তা আপনি ইতিমধ্যে জানেন, তারা কী করে তা আপনি এখনও জানেন না। এটি জানতে এই স্ক্রিনকাস্টটি দেখুন ।
সাতো ক্যাটসুর

উত্তর:


81

Qযেমনটি আপনি পেয়েছেন, প্রাক্তন মোড। এটি ইন্টারেক্টিভভাবে ব্যবহার করা সম্পূর্ণরূপে কার্যকর নয়, তবে এটি বিদ্যমান কারণ ভিমটি পুরানো exবাইনারি অনুকরণ করতে ব্যবহার করা যেতে পারে । প্রকৃতপক্ষে, অনেকগুলি সিস্টেম exকমান্ডটি কেবলমাত্র এর সাথে সিমলিং করে সরবরাহ করে vim

q:, বা এর :<C-f>পরিবর্তে আপনার কমান্ড-লাইনের ইতিহাস ব্রাউজ করার এবং এটি একটি সাধারণ বাফারের মতো সম্পাদনা করার একটি উপায় সরবরাহ করে। এটি আপনার পূর্ববর্তী কমান্ডটি সন্ধান করা সহজ করে তোলে, সাধারণ ভিম কমান্ডের সাহায্যে এটি সম্পাদনা করুন এবং পরিবর্তিত কমান্ডটি চালান। q/এবং q?কমান্ড অনুসন্ধানের ইতিহাস জন্য একই কার্যকারিতা প্রদান বিদ্যমান।


63

এক্স মোডে ভিমটি কার্যকর যখন:

  • আপনাকে ইন্টারেটিভ (স্ক্রিপ্টের অংশ হিসাবে) ফাইলগুলি (একাধিক) সম্পাদনা করার দরকার রয়েছে।
  • আপনার সংযোগটি খুব ধীর গতির বা আপনার ক্রিয়াকলাপের পরে পর্দা আপডেট করা হয়নি।
  • ম্যাপিং এবং সংক্ষিপ্ত বিবরণ অক্ষম করা হয়।
  • সাধারণ কীগুলি যেমন সঠিকভাবে কাজ করে না Escapeবা Controlনা করে।

মূলত viভিজ্যুয়াল মোডের জন্য exভিম এক্স মোডটি কেবলমাত্র এমুলেশন ex(তারা এখনও একই কোড চালায়), সুতরাং exvi এবং তদ্বিপরীত থেকে কমান্ড মোডে পৌঁছানো সম্ভব । এখানে দুটি মোড রয়েছে: এক্স মোড ( vim -e) এবং উন্নত এক্স মোড যা vi সামঞ্জস্যপূর্ণ এক্স-মোড ( vim -E) এর চেয়ে আরও উন্নত কমান্ডের জন্য অনুমতি দেয় । দেখুন: এক্স মোড এবং উন্নত এক্স মোডের মধ্যে পার্থক্য কী?

প্রাক্তন সম্পাদকদের একটি পরিবারের মূল: edit, exএবং vi। প্রাক্তন একটি দুর্দান্ত সেট ed, যার মধ্যে সর্বাধিক উল্লেখযোগ্য এক্সটেনশন একটি ডিসপ্লে সম্পাদনা সুবিধা facility প্রাক্তন (1)

ইন্টারেক্টিভভাবে ফাইল সম্পাদনা করা সর্বাধিক সাধারণ ব্যবহার এবং এটি একইভাবে ব্যবহার করা লোকেরা sedএবং awkতবে তারা আরও প্রবাহমুখী - তারা কেবল ফাইলটি শুরু থেকে শেষ পর্যন্ত পড়েন (তারা একাধিক লাইনের সাথে কাজ করার জন্য নকশাকৃত নয়) ) vimবাফারমুখী হওয়ার সময় - আপনি নিজের পছন্দ মতো ফাইলটিতে এগিয়ে এবং পিছনে যেতে পারেন যা এটিকে এত শক্তিশালী করে তোলে।

মূলত:

sedএকটি হল এস tream ইডি itor, না একটি ফাইল এডিটর।

তবুও, ফাইলগুলি সম্পাদনা করার চেষ্টা করার জন্য লোকেরা এটির অপব্যবহার করছে বলে মনে হয় এবং সত্যটি হ'ল এটি ফাইল সম্পাদনা করে না। দ্বিতীয়ত এর বিকল্পগুলি যেমন স্থান ( -i) এর মান হ'ল অ-মানক ফ্রিবিএসডি এক্সটেনশন এবং অন্যান্য অপারেটিং সিস্টেমে উপলব্ধ নাও হতে পারে। সুতরাং আপনি যদি অপ্রিয়যোগ্য কোড এড়াতে চান, I / O ওভারহেড এবং খারাপ পার্শ্ব প্রতিক্রিয়া (যেমন সিমলিংকগুলি ধ্বংস করা) আপনার ব্যবহার করা উচিত exযা মানক ইউএনএক্স কমান্ড-ভিত্তিক সম্পাদক (বরাবর ed) বাশফাকের প্রশ্ন


প্রাক্তন মোডে আমি দরকারী অন্যান্য জিনিসগুলি এটি খেলার মাঠ হিসাবে ( pythonকনসোলের অনুরূপ ) হিসাবে ব্যবহার করা হয় যেখানে আপনি একাধিক কমান্ড প্রয়োগ করতে পারেন নিয়মিত অভিব্যক্তিগুলি কাজ / ডিবাগিং, ভিআইএম কনফিগারেশন পরীক্ষা করা, বাহ্যিক আদেশগুলি কার্যকর করা বা রেজিস্টারগুলির সাথে কাজ করা ইত্যাদি can ।

উদাহরণ স্বরূপ:

let @d = '<td></td>'
let @r = '<tr>' . repeat(@d, 5) . '</tr>'
echo @r
let @t = '<table>' . repeat(@r, 5) . '</table>'
reg

যা সাধারণ মোডের চেয়ে প্রাক্তন মোডে আরও সহজ (যেখানে আপনি কেবলমাত্র আপনার শেষ আদেশটি দেখতে পাবেন)।


ব্যবহারিক ব্যবহার

আমার মধ্যে নিম্নলিখিত এলিয়াসগুলি রয়েছে .bash_aliases:

alias trim="ex +'bufdo!%s/\s\+$//e' -scxa"
alias retab="ex +'set ts=2' +'bufdo retab' -scxa"

দ্রষ্টব্য: ব্যবহার bufdoকরা exPOSIX- অনুবর্তী পদ্ধতি নয় ( ম্যানুয়াল অনুসারে ), সুতরাং এর পরিবর্তে আপনি এটি ব্যবহার করার বিষয়ে বিবেচনা করতে পারেন find!সংরক্ষণ (অন্যথায় সতর্কীকরণ উৎপন্ন হয়) ছাড়া বাফার সুইচিং বাধ্য করতে ব্যবহৃত হয়।

আমি প্রথমটি আমার সমস্ত উত্স ফাইলগুলিতে ট্রেলিং স্পেসগুলি ছাঁটাই করতে ব্যবহার করছি eg

trim **/*.php

দ্বিতীয়টি সমস্ত ট্যাবকে স্পেসে রূপান্তর করে (পুনরাবৃত্তভাবে), যেমন:

retab **/*.php

আমার জন্য ব্যবহার retabকরা যথেষ্ট, তবে এখানে বর্ণিত কিছু ডাউনসাইড রয়েছে । -Vভারবোসিটি আউটপুট বৃদ্ধির জন্য অতিরিক্ত যুক্ত করুন ।

নোট করুন যে উপরের উদাহরণগুলি zsh / bash4 গ্লোববিং ( **) ব্যবহার করে , সুতরাং আপনার শেলটি এটি সমর্থন করে এবং এটি সক্ষম হয়েছে তা নিশ্চিত করুন।

আরও ব্যবহারিক উদাহরণের জন্য (যেমন এইচটিএমএল ফাইলগুলি পার্স করার মতো) পরীক্ষা করুন:

প্রাক্তন মোড সম্পর্কে আরও জানুন এখানে:


আপনি "সম্পাদনা (একাধিক) ফাইল অ ইন্টারেক্টিভ" অপারেশন করে দিয়ে অর্জন করা সহজ একটি উদাহরণ পোষ্ট দয়া করে করতে পারেন exতুলনায় এটি সাথে আছেন ed, sedঅথবা awk?
সাতো ক্যাটসুর

1
@ স্যাটোক্যাটসুরার দুটি ব্যবহারিক ব্যবহার যুক্ত হয়েছে যা একাধিক ফাইলের সাথে সম্পর্কিত।
কেনোরব

exমোডে আরও ভাল উপলব্ধি পেতে আমি ডকুমেন্টেশনের মাধ্যমে খনন করেছি । !আপনার trimওরফে bufdoকমান্ডে আপনার (কেন ) একটি ঠুং ঠুং শব্দ রয়েছে তা আমি পাই না । এটি কি সর্বশেষ ফাইল ব্যতীত সমস্ত ফাইলের সমস্ত পরিবর্তন ত্যাগ করবে? তা না হলে কেন?
ওয়াইল্ডকার্ড

@ উইল্ডকার্ড ব্যতীত !মূলত কাজ করবে না, প্রতিবার যখন বাফারটি স্যুইচ করা হয় তখন exঅ-সংরক্ষিত পরিবর্তনগুলি সম্পর্কে অভিযোগ করবে (এবং আমরা এর শেষে খুব পরিবর্তনগুলি সংরক্ষণ করছি xa)। সতর্কতা অক্ষম করা যেতে পারে তবে এটি যুক্ত করা আরও সহজ !
কেনারব

আমি দেখছি ... আমি অনুমান করি যে আমি ডকুমেন্টেশনগুলি ভুলভাবে পড়েছি; এটা নির্দিষ্ট করে ছাড়া! কমান্ড বাফার পরিত্যক্ত করা যাবে না যদি ব্যর্থ হবে, কিন্তু এটা স্পষ্টভাবে নির্দিষ্ট করে না !কারণ হবে বাফার করতে না বাতিল করা .... সুতরাং, "পরিত্যক্ত" নেই এই ক্ষেত্রে মানে "বাদ , কারণ এতে ডিস্কে লিখিত কিছু নেই "? অথবা কি? (আমি তাকিয়ে আছি :help bufdo)
ওয়াইল্ডকার্ড

18

আমি খুব কমই প্রাক্তন মোড ব্যবহার করি তবে আমার যখন এটির প্রয়োজন হয় তখন আমি এর উপস্থিতিটির জন্য কৃতজ্ঞ।

আমি মাঝে মাঝে ভিপিএন এর মাধ্যমে এসএসএসের মাধ্যমে সিস্টেমগুলিতে অ্যাক্সেস করি এবং এই সংযোগগুলি কখনও কখনও ধীর হয়ে যেতে পারে। সমস্যাটিকে আরও খারাপ করে তুলতে, আমার মাঝে মাঝে রিমোট সাইডে একটি ফাইল সম্পাদনা করতে হবে যা ssh এবং VPN এর পিছনে থাকা ছাড়াও ধীর সিরিয়াল সংযোগ (তাই, 9600 বাউড প্লাস প্রচুর নেটওয়ার্কে বিলম্বিত) হয়।

এটি এরকম সময়ে যে ভিজ্যুয়াল প্রতিক্রিয়া এবং স্ক্রিন আপডেট হওয়া আরও বাধা হয়ে দাঁড়ায় কারণ আমি যা দেখি তা বিলম্বিত হয় (এর প্রভাবটি হ'ল স্পোর্টস স্টেডিয়ামের মতো মাইকের সাথে কথা বলার মতো তবে স্পিকারগুলির সাথে। এবং কখনও কখনও বিলম্বিত প্রতিক্রিয়ার কারণে বিভ্রান্ত হয়ে পড়ে)।

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

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


13

দীর্ঘ জটিল কমান্ড লেখার জন্য কমান্ড-লাইন উইন্ডোটি কার্যকর। যেহেতু কমান্ডের ইতিহাস উইন্ডো হিসাবে খোলে, আপনি যে কোনও ভিআইএম নেভিগেশন বা সম্পাদনা কমান্ড / ম্যাপিং ব্যবহার করতে পারেন।

বলুন যে আপনি একটি দীর্ঘ প্রতিস্থাপন আদেশটি সম্পাদনা করতে চান যা আপনি একবার দৌড়েছিলেন, কিন্তু একটি ভুল করেছিলেন:

:%165,177s:here is a whole bunch of text I wnat to replace:here is the replacement:c

অনুসন্ধানের স্ট্রিংটি পরিবর্তন করতে, আপনি bনেভিগেট করতে প্রান্ত লাইনের মতো ভিম গতি ব্যবহার করতে পারবেন না (যদিও আমি বিশ্বাস করি যে এই নেভিগেশনের জন্য কী ম্যাপিং রয়েছে)। পরিবর্তে, বেশিরভাগ লোক বাম-তীর কীটি বেশ কয়েকবার আঘাত করে।

আরও ভাল উপায়: q:কমান্ড-লাইন উইন্ডোতে প্রবেশ kকরতে, শেষ কমান্ডে যেতে এবং আপনি যে কমান্ডটি পরিবর্তন করতে চান সেই অংশে স্বাভাবিক গতিতে নেভিগেট করুন। একটি সম্পূর্ণ শব্দ, কোন সমস্যা পরিবর্তন করতে চান: ciw


ঠিক আছে ধন্যবাদ. আপনি কি নিশ্চিত q: হয় প্রাক্তন কম্যান্ড-লাইন? সহায়তাটি তিনি কেবল মোডের সামনে আনার জন্য "প্রাক্তন" বাক্যাংশটি ব্যবহার করেন Qতবে এটি যে স্ট্যান্ডার্ড ভিম সম্পাদনাটির বিষয়ে আপনি উল্লেখ করছেন সেটি সমর্থন করে না - কেবল এটি q:করে, যা সহায়তা কেবল 'কমান্ড লাইন মোড' বলে। আমি জানি আমি প্রথমে দুটোকে বিভ্রান্ত করেছিলাম তবে আমাদের সম্ভবত এটি নিশ্চিত করা উচিত যে আমরা এখানে পার্থক্য সম্পর্কে পরিষ্কার।
অ্যান্ড্রু ফেরিয়ার 5'15

1
আমি :help q:এই বাক্যাংশটি ব্যবহার করার সিদ্ধান্ত নেওয়ার আগে অনুসন্ধান করেছি, তবে আমি পরিভাষাটি সম্পর্কে বিভ্রান্ত হতে পারি।
বিএসমিথ 89

1
আমিও এই পরিভাষা সম্পর্কে বিভ্রান্ত হয়ে পড়েছি। আমি সাধারণত নিম্নলিখিত কমান্ড হিসাবে প্রাক্তন কমান্ড টাইপ করার বিষয়ে কথা বলি :, তবে আমি এটি ভুল ব্যবহার করতে পারি।
বিএসমিথ 89

3
আপনার উত্তরের বিষয়বস্তু সমস্ত সঠিক, তবে আপনি যেভাবে পরিভাষাটি ব্যবহার করছেন তা আমার কাছে কিছুটা বিভ্রান্তিকর। আমি মনে করি আপনি ডকুমেন্টেশনটি কিছুটা ভুলভাবে ব্যাখ্যা করছেন। q:কোনও প্রাক্তন কমান্ড-লাইন খুলবে না। এটি কমান্ড ইতিহাসের উইন্ডোটি খুলবে , যেখানে বর্তমান এবং পূর্ববর্তী প্রাক্তন কমান্ডগুলি সম্পাদনা করা যেতে পারে। প্রাক্তন কমান্ড লাইনটি আপনি যখন :সাধারণ মোডে টিপেন তখন আপনি যা পান ।
সমৃদ্ধ

3
FWIW আমি মনে করি Vim ডকুমেন্টেশনটিও কিছুটা বিভ্রান্ত, কারণ স্থানগুলিতে এটি সমস্ত :আদেশকে 'প্রাক্তন' কমান্ড বলে উল্লেখ করে। আইএমএইচও কেবলমাত্র প্রাক্তন কমান্ডকে প্রাক্তন কমান্ড হিসাবে বিবেচনা করা উচিত।
সমৃদ্ধ

6

আমাকে আংশিক দৃষ্টিশক্তিযুক্ত একজন ব্যক্তি বলেছিলেন যে অন্ধ হয়ে যাচ্ছে যে সে প্রাক্তনে স্যুইচ করছে, সুতরাং এটির একটি ব্যবহার এটি। আমি নিজেও ভি এর চেয়ে যথেষ্ট বয়স্ক এবং আমি এড থেকে প্রাক্তন দিকে চলে এসেছি (হ্যাঁ, আমি জানি, "এড স্ট্যান্ডার্ড এডিটর")। আমি কেবল ভিআই মোডে যা করি তা হ'ল লিস্প কোড লেখার সময় প্যারেনের সাথে মেলে to


এই সাক্ষাত্কারটি আমাকে মনে করিয়ে দেয় । exযদিও বিশেষভাবে উল্লেখ করা হয়েছিল তা আমার মনে নেই।
মার্টিন টর্নয়েজ

দুর্দান্ত অন্তর্দৃষ্টি, আমি কখনই এটি সম্পর্কে চিন্তা করতাম না। অনেক ধন্যবাদ, দুর্দান্ত উত্তর।
অ্যান্ড্রু ফেরিয়ার

2

এখানে ইতিমধ্যে উল্লিখিত ব্যবহারগুলি বাদে প্রাক্তনটি লিনাক্স কনসোলে ফাইলগুলি সম্পাদনা করার উপায়ও যদি এটি এস / 390 প্ল্যাটফর্মে থাকে এবং কনসোলটি স্ক্রিনমুখী পরিবর্তে লাইন-ভিত্তিক হয়ে থাকে।


-1

মূল "প্রাক্তন "টি ইউনিক্সের" এড "পাঠ্য সম্পাদকের আপগ্রেড সংস্করণ ছিল। 2BSD এ একটি ভিজ্যুয়াল মোড যুক্ত করা হয়েছিল এবং নতুন সম্পাদককে "vi" বলা হয়েছিল।

যদি কেউ প্রাক্তন কমান্ড লাইনটি ব্যবহার করতে চায় তবে সে ":" কী দিয়ে কমান্ড মোডে স্যুইচ করবে। সুতরাং আমার সেরা বোঝার মধ্যে প্রাক্তনটি আসলে নস্টালজির জন্য নেই, এটি কমান্ড মোড সরবরাহ করার অংশ।

আপনি এর সন্নিবেশ মোড দ্বারা প্রবেশ করতে পারেন

 :i 

তারপরে "চাপুন এবং আপনার পাঠ্যটি টাইপ করুন ^ সি দিয়ে প্রস্থান করুন it

 :i my multiline text \with a second line.^c

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

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