क्या करता है: खुले में करना


18

विम के दस्तावेज में :openकमांड के बारे में यह कहना है :

This command is in Vi, but Vim only simulates it:

                                                        *:o* *:op* *:open*
:[range]o[pen]                      Works like |:visual|: end Ex mode.
                                {Vi: start editing in open mode}

:[range]o[pen] /pattern/    As above, additionally move the cursor to the
                                column where "pattern" matches in the cursor
                                line.

Vim does not support open mode, since it's not really useful.  For those
situations where ":open" would start open mode Vim will leave Ex mode, which
allows executing the same commands, but updates the whole screen instead of
only one line.

यह "सिमुलेशन" की प्रकृति पर टिप्पणी नहीं करता है, और इसे अलग-अलग व्यवहार वाले वास्तविक आदेश के बजाय अनुकरण क्यों माना जाता है। जब पूर्व मोड (क्यू) से चलाया जाता है, यह वास्तव में वर्णित के रूप में व्यवहार करता है।

हालाँकि, एक अलग खुली कमांड भी प्रतीत होती है। जब सामान्य कमांड लाइन से, या पूर्व मोड से विभिन्न तर्कों के साथ चलाया जाता है, तो यह एक पर्यायवाची शब्द प्रतीत होता है :edit। जब a से कमांड मोड से रन किया जाता है /pattern/, तो यह कर्सर को स्थिति देता है और जाहिरा तौर पर चलाता है :edit(कर्सर की स्थिति केवल तभी स्पष्ट होती है यदि: संपादन विफल हो जाता है।) इसे भी चलाया जा सकता है :open /pattern/ file, जो कर्सर को चलाता है और चलाता है।:edit file

मेरा सवाल है: यह दस्तावेज क्यों नहीं है? क्या इससे कोई अंतर है :editकि मैं देख नहीं रहा हूं? क्या :openएक बार के लिए एक पर्याय बन गया था :editऔर केवल बाद में पॉसिक्स का अनुपालन करने के प्रयास में बदल गया था?

जवाबों:


13

Vi का "ओपन मोड" उन टर्मिनलों के लिए उपयोगी था जिनकी एक एकल पंक्ति थी, जैसे कि हार्डकॉपी टर्मिनल। ओपन मोड में, vi में फ़ाइल का "सिंगल लाइन व्यू" था। कर्सर को इधर-उधर करने से पूरी लाइन फिर से अलग हो जाएगी, और हटाए गए वर्ण अलग-अलग मुद्रित होंगे।

"अनुकरण" जो विम करता है वह बस कमांड का समर्थन कर रहा है, जिससे यह कार्य करता है (जैसा कि प्रलेखन कहता है) जैसा है :visualऔर चूंकि :visual"अन्यथा के रूप में ही है :edit," शायद इसीलिए आप इसे अभिनय की तरह देखते हैं :edit

स्रोत कोड परिप्रेक्ष्य से, ( ) :openमें लागू किया गया है । यह उस मामले से निपटने के लिए कुछ सामान करता है जहां इसे एक नियमित अभिव्यक्ति प्रदान की जाती है, लेकिन हमेशा एक कॉल के साथ समाप्त होता है ।ex_docmd.cex_open()do_exedit()

के कार्यान्वयन :edit, :baddऔर :visualएक ex_edit()ही फ़ाइल में फ़ंक्शन में निहित है , और वह फ़ंक्शन (कुछ नहीं) के लिए एक सीधा कॉल है do_exedit()। इस प्रकार, जब नियमित अभिव्यक्ति पैरामीटर को संभालने के अलावा, उसी कोड को कॉल किया जाता है। do_exedit()थोड़ा बालों वाला है, और यह व्यवहार वास्तविक रूप से जारी किए गए आदेश के आधार पर भारी रूप से संशोधित किया गया है, लेकिन यह खुले / संपादित / दृश्य के लिए कमांड टोकन के लिए स्पष्ट रूप से जांच नहीं करता है। इस प्रकार, तीन आदेशों का परिणाम कम-से-कम समान कोड में चल रहा है do_exedit()


8

से एक परिचय Vi के साथ संपादन प्रदर्शित करने के लिए :

यदि आप हार्डकॉपी टर्मिनल या टर्मिनल पर हैं, जिसमें एक कर्सर नहीं है जो नीचे की रेखा से दूर जा सकता है, तो आप अभी भी vi के कमांड सेट का उपयोग कर सकते हैं, लेकिन एक अलग मोड में। जब आप एक vi कमांड देते हैं, तो संपादक आपको बताएगा कि यह ओपन मोड का उपयोग कर रहा है। यह नाम पूर्व में खुले कमांड से आता है, जिसका उपयोग उसी मोड में आने के लिए किया जाता है।

दृश्य मोड और ओपन मोड के बीच एकमात्र अंतर वह तरीका है जिसमें पाठ प्रदर्शित होता है।

ओपन मोड में एडिटर फाइल में सिंगल लाइन विंडो का उपयोग करता है, और फाइल में आगे और पीछे बढ़ने से नई लाइनें प्रदर्शित होती हैं, जो हमेशा वर्तमान लाइन के नीचे होती हैं। Vi के दो कमांड खुले में अलग-अलग काम करते हैं: z और ^ R। Z कमांड पैरामीटर नहीं लेता है, बल्कि वर्तमान लाइन के चारों ओर संदर्भ की एक विंडो खींचता है और फिर आपको वर्तमान लाइन पर लौटाता है।

यदि आप हार्डकॉपी टर्मिनल पर हैं, तो ^ कमांड वर्तमान लाइन को फिर से टाइप करेगा। ऐसे टर्मिनलों पर, संपादक आम तौर पर वर्तमान लाइन का प्रतिनिधित्व करने के लिए दो लाइनों का उपयोग करता है। पहली पंक्ति उस पंक्ति की एक प्रति है जिसे आपने इसे संपादित करना शुरू किया था, और आप इस पंक्ति के नीचे की रेखा पर काम करते हैं। जब आप वर्णों को हटाते हैं, तो संपादक आपको हटाए गए वर्णों को दिखाने के लिए कई प्रकार के अक्षर दिखाता है। संपादक इस तरह के बदलावों के बाद जल्द ही वर्तमान लाइन को फिर से दिखाता है ताकि आप देख सकें कि रेखा फिर से क्या दिखती है।

कभी-कभी बहुत धीमी गति से टर्मिनलों पर इस मोड का उपयोग करना उपयोगी होता है जो पूर्ण स्क्रीन मोड में vi का समर्थन कर सकता है। आप पूर्व दर्ज करके और एक खुली कमांड का उपयोग करके ऐसा कर सकते हैं।

:openएक वि क्लोन के रूप में विम की उत्पत्ति की एक कलाकृति है जो आज पूरी तरह से बेकार है। मैं केवल यह मान सकता हूं कि यह POSIX संगतता के लिए वहां बना हुआ है।

अस्पष्ट समानताओं के बावजूद, :openहै के लिए एक विकल्प :editकल्पना के किसी भी खिंचाव से।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.