VIM के पूर्ववत वृक्ष का उपयोग कैसे किया जाता है?


132

यह उत्तर कहता है:

विम का पूर्ववत / फिर से सिस्टम अपराजेय है। कुछ लिखें, पूर्ववत करें, कुछ और लिखें, और आप अभी भी टाइप की गई पहली चीज़ को वापस पा सकते हैं क्योंकि विम एक ढेर के बजाय एक पूर्ववत पेड़ का उपयोग करता है। लगभग हर दूसरे कार्यक्रम में, आपके द्वारा टाइप की गई पहली चीज का इतिहास इस परिस्थिति में खो जाता है।

यह मैंने पहली बार सुना है। मैं पेड़ के साथ कैसे पीछे हट सकता हूं?


1
ईर्ष्या करने वाले Emacs उपयोगकर्ता पूर्ववत पेड़-मोड के बारे में जानना चाह सकते हैं ।
हारून मिलर

जवाबों:


142

यह भी देखें :h undo-redo, जो सभी आदेशों और उनके उपयोग को सूचीबद्ध करता है।

पूर्ववत पेड़ को पार करने के दो तरीके हैं। एक "समय में वापस जाना" है। g+और g-कालानुक्रमिक या रिवर्स-कालानुक्रमिक क्रम में पेड़ के सभी नोड्स को पीछे छोड़ देगा (जो थोड़ा भ्रमित हो सकता है, क्योंकि यह पूर्ववत शाखाओं के बीच मनमाने ढंग से कूद सकता है, लेकिन यदि आप g-लंबे समय तक करते हैं तो आपको हमेशा वही मिलेगा जहां आपको जाने की आवश्यकता है अंत में)। :earlierऔर :laterसमय विवरणक जैसे 7mया 1h; फिर से यह आपको पूर्ववत शाखाओं के बीच मनमाने ढंग से कूद सकता है।

दूसरा तरीका यह है कि पेड़ में विशिष्ट नोड्स के लिए कूदना :undo nजहां nएक क्रिया का एक नंबर है। (सभी क्रियाएं, यानी पाठ जोड़, विलोपन, प्रतिस्थापन, क्रमिक रूप से गिने जाते हैं जैसा कि आप उन्हें करते हैं।) आप पूर्ववत वृक्ष के पत्तों पर क्रियाओं की संख्या देख सकते हैं :undolist। यह आपको शाखाओं के बीच आसानी से कूदने देगा। फिर आप उस शाखा का उपयोग कर सकते हैं uऔर Ctrl-Rऊपर और नीचे जा सकते हैं ।

विम मदद में कुछ अच्छे उदाहरण हैं। यह पता लगाने का सबसे अच्छा तरीका है कि यह कैसे काम करता है, इसके साथ थोड़ा खेलना है।


43
क्या आप शाखाओं का विलय कर सकते हैं? (मैं मजाक कर रहा हूं)
he_the_great

40
तरह का। ऊपर देखें: h अंडरोजेन
पॉड

23
विम इतना भयानक है कि यह भी तरीके को लागू करता है हम मजाक करते हैं कि यह कितना भयानक है!
andyortlieb

4
मैं इस पूर्ववत् वृक्ष का उपयोग करना नहीं जानता था, लेकिन मुझे पता था कि यह किसी दिन मेरे जीवन को बचाएगा। खैर, वह दिन आ गया। धन्यवाद!!
ndvo

1
@Pod ऐसा लगता है कि undojoinशाखाओं के साथ कुछ नहीं करना है; वास्तव में, बहुत ही अगला सहायता खंड यह कहकर शुरू होता है कि "ऊपर हमने केवल पूर्ववत / फिर से की गई एक पंक्ति पर चर्चा की थी। लेकिन इसे बंद करना भी संभव है।" क्या undojoinशाखाओं के साथ उपयोग करने का कोई तरीका है जिसे मैं अभी नहीं देख रहा हूं?
काइल स्ट्रैंड

70

मुझे पार्टी में थोड़ी देर हो गई है, लेकिन मुझे लगा कि मैं उल्लेख करूंगा कि मैंने विम के लिए एक पूर्ववत पेड़ विज़ुअलाइज़ेशन प्लगइन लिखा है: http://bitbucket.org/sjl/gundo.vim/

व्यक्तिगत रूप से मैंने पाया कि पेड़ को इस तरह से रेखांकन करना ही एकमात्र तरीका था जिससे मैं इसे समझ सकता था।


एक अधिक अप-टू-डेट गिट रिपॉजिटरी github.com/sjl/gundo.vim पर मौजूद है । विम-प्लग के साथ, प्लगइन के साथ स्थापित किया जा सकता है Plug 'sjl/gundo.vim'और फिर nnoremap <F5> :GundoToggle<CR>( <F5>जो भी महत्वपूर्ण अनुक्रम आप बाँधना चाहते हैं उसके द्वारा प्रतिस्थापित )
ewen-lbh


16

यदि आप विम का उपयोग कर रहे हैं, तो आप पूर्ववत पेड़ के माध्यम से नेविगेट कर सकते हैं:

  • u: (पूर्ववत करें) पूर्ववत वृक्ष में वापस जाएँ
  • Ctrl+R: (पूर्ववत करें) पूर्ववत वृक्ष में आगे बढ़ें

समय में दस्तावेज़ को वापस लाने या आगे बढ़ाने के अन्य तरीके:

  • :earlier 15m: समय 15 मिनट में वापस जाएँ
  • :later 15m: समय 15 मिनट में आगे बढ़ें

2
यह उत्तर केवल यह बताता है कि कैसे आगे और पीछे एक शाखा पर आगे बढ़ना है। शाखाओं के बीच नहीं जाना है।
जोनाथन हार्टले

यह समय-क्रम से सभी बिंदुओं को छांटने वाली सभी शाखाओं के पार चला जाएगा। देखें @BrianCarper का जवाब।
होलोले

@JonathanHartley, यदि आप उपयोग कर रहे हैं earlierऔर laterयह शाखाओं के पार नहीं जा रहा है। मैं उम्मीद करूंगा कि अधिकांश लोग वास्तव में अपनी बनाई विभिन्न शाखाओं की परवाह न करें या याद रखें। लेकिन बस समय में वापस जाना चाहते हैं। यदि आप शाखाएँ बनाना चाहते हैं और उन्हें नाम देना चाहते हैं gitया एक संस्करण नियंत्रण प्रणाली एक बेहतर विकल्प है।
अल्फा_989

@ Alpha_989 संस्करण नियंत्रण के बारे में आपकी टिप्पणी का कोई मतलब नहीं है। संस्करण नियंत्रण डिस्क पर नामित फ़ाइलों की स्थिति के लिए है। हम विम के पूर्ववत पेड़ के बारे में बात कर रहे हैं, जो स्मृति में सिर्फ डेटा संरचना है। वे दोनों 'शाखा' शब्द का उपयोग करते हैं, लेकिन इसका मतलब एक ही बात नहीं है।
जोनाथन हार्टले

पहले की ओर इशारा करते हुए सभी को धन्यवाद / बाद में शाखाओं में चले जाओ!
जोनाथन हार्टले

9

मुझे पता है कि इस सवाल का जवाब दिया गया है, लेकिन मुझे लगा कि मैं एक उदाहरण जोड़ूंगा।

एक नई फ़ाइल बनाएं और टाइप करें:

this is a line

undolपूर्ववत पेड़ प्रदर्शित करेगा। इस बिंदु पर आपने कुछ भी पूर्ववत् नहीं किया है

:undol

number changes  when               saved
     1       1  14:50:36

अब ESC दबाएँ और लाइन को संशोधित करें:

this is a old line

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

अब लाइन को संशोधित करें ताकि यह कहे:

this is a new line

अब :undolदिखाता है:

number changes  when               saved
     2       2  87 seconds ago
     3       2  3 seconds ago

आप टाइप करके पहली ब्रांच में जा सकते हैं

:u 2

यह आपको नंबर 2 से जुड़ी शाखा के अंत में ले जाएगा। आप इस शाखा के साथ g+और आगे बढ़ सकते हैं g-। इस बिंदु पर g+कुछ नहीं होगा (आप पत्ती पर हैं)। यदि आप g-"पुराना" दबाते हैं, तो आपको हटा दिया जाएगा (आप पहले पूर्ववत पेड़ का पता लगा रहे हैं)। यदि आप "पुराने" को हटा दें g-और g+फिर से दबाएं , तो "पुराना" फिर से हो जाएगा।

यदि आप टाइप करते हैं

:u 3

आप दूसरी पूर्ववत शाखा के पत्ते पर कूदेंगे और इसे पढ़ेंगे:

this is a new line


3

Gundo.vim का उपयोग करने के अलावा मैं उल्लेख करना पसंद करता हूं g+औरg-


3

पैकेज undotree शुद्ध vimscript में लिखा गया है इसलिए कोई आवश्यकता नहीं है।

और इसे बहुत देर होने से पहले अपने vimrc में जोड़ें:

  set nobackup
  set noswapfile
  set nowritebackup
  set undolevels=10000         " use many levels of undo
  set history=10000    " After nocompatible

  if has('persistent_undo')
    set undodir=$HOME/.vim/undo
    set undofile 
  endif 

यहाँ छवि विवरण दर्ज करें

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