क्या मैं nvi और / या मूल vi में कई बार पूर्ववत कर सकता हूं?


13

कभी-कभी मैं विम के बिना एक सिस्टम पर हूं, और डिफ़ॉल्ट nvi(बीएसडी सिस्टम) या मूल vi(आर्क लिनक्स) का उपयोग करता हूं ।

काफी अंतर हैं, लेकिन सबसे बड़ी झुंझलाहट यह है कि मैं केवल अपने पिछले ऑपरेशन को पूर्ववत कर सकता हूं। दबाने uदूसरी बार काम करता है एक "फिर से करें" कर रहे हैं।

क्या यह काम करने का कोई तरीका है?

जवाबों:


16

से nvi(1):

 u       Undo the last change made to the file.  If repeated, the u command
         alternates between these two states.  The . command, when used
         immediately after u, causes the change log to be rolled forward or
         backward, depending on the action of the u command.

इसलिए दबाएं u, और फिर .अधिक पूर्ववत करने के लिए दबाए रखें ; यदि आप uफिर से दबाते हैं , तो यह 'रिवर्स' दिशा में .होगा और दबाने पर एक रीडो होगा।

मैं कल तक इस बारे में कभी नहीं जानता था; और सोचा कि यह किसी तरह की नई सुविधा है, लेकिन ऐसा लगता है कि 1996 से कम से कम 1.79 के बाद से इस तरह काम किया है

यह मूल vi में काम नहीं करता है ; जहां पूर्ववत दस्तावेज के रूप में है:

   u      Undoes the last change made to the current buffer.  If repeated,
          will alternate  between  these  two  states,  thus  is  its  own
          inverse.  When  used after an insert which inserted text on more
          than one line, the lines are saved in the numeric named  buffers
          (3.5).

जो वास्तव में यह कहने का एक जटिल तरीका है कि uफिर से दबाने से आपके परिवर्तन फिर से हो जाएंगे।

जो भी है विम का :help undoकहना है (और मैंने यह क्यों मान लिया कि यह भी काम नहीं करेगा nvi):

 u                       Undo [count] changes.  {Vi: only one level}

1

सबसे पास की चीज़ मूल viको कई पूर्ववत करने के लिए है (एक तरफ से Uएक पंक्ति के भीतर कई परिवर्तनों को वापस कर सकती है) गिने हुए रजिस्टर हैं, जो नौ सबसे हाल के परिवर्तनों या विलोपन को पकड़ते हैं।

यदि आप एक गिने हुए रजिस्टर से डालते हैं, तो बाद के डॉट कमांड उस कमांड को बढ़ाएंगे जब वह कमांड को दोहराता है।

उदाहरण के लिए, निम्न पाठ के साथ, कर्सर रेखा के साथ >,

  aaaa
> bbbb
  cccc
  dddd
  eeee

आदेश dd..में परिणाम होगा:

  aaaa
> eeee

यदि आप टाइप करते हैं "1P, तो vi रजिस्टर से सबसे हाल का विलोपन करेगा "1:

  aaaa
> dddd
  eeee

हिटिंग .अगले सबसे हाल के रजिस्टर की सामग्री डाल देगा "2P, ऐसा करने से , और .फिर से मारने से रजिस्टर की सामग्री डाल दी जाएगी "3

तो, संक्षेप में, "P..आपके द्वारा हटाए गए सभी पाठ को वापस रख देगा

  aaaa
> bbbb
  cccc
  dddd
  eeee

शानदार नहीं, लेकिन कुछ भी नहीं से बेहतर! अधिक उपयोगी रूप से आप बफर के आरंभ या अंत में इसका उपयोग कर सकते हैं ताकि यह पता लगाया जा सके कि आपके गिने हुए रजिस्टरों में क्या है। तब आप आसानी से उस चीज़ को हटा सकते हैं जिसकी आपको आवश्यकता नहीं है।

इसके तहत दस्तावेज है :help redo-register


-1

मूल vi का उपयोग करते हुए, n n कदम पीछे जाने के लिए [n] u को हिट करें। उत्तरोत्तर चरण दर चरण आगे बढ़ने के लिए ...

  • [n] यू को वापस n स्टेप पर जाने के लिए मारो
  • फिर [n] u को n n चरणों में हिट करें
  • फिर वापस जाने के लिए [n + 1] u मारा [n + 1] कदम
  • आदि

1
मेरे पास मूल vi के पास कुछ है , और यह n कदम पीछे जाने के लिए प्रतीत नहीं होता है।
मूरू

माना। ओरिजनल वीआई केवल एक बदलाव को वापस ले सकता है u, या एक सिंगल लाइन को पुनर्स्थापित कर सकता है कि इससे पहले कि आप इसे कैसे संपादित करना शुरू करें U
एंटनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.