मैं सुरक्षित रूप से उन परिवर्तनों को कैसे बदल सकता हूं जो मैंने किए या नहीं किए होंगे?


12

बहुत बार मैं गलत विंडो के साथ टाइप करने की गलती करता हूं (और ऐसा USB प्रमाणक के साथ कुछ बार किया है)। बहुत से हॉटकीज़ सक्षम (Gmail, VLC, Vim) वाले कार्यक्रमों में, अक्सर अनचाहे संशोधन करने का यह अनपेक्षित परिणाम होता है।

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

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


1
क्या आप "रिवर्ट" कार्रवाई की तलाश कर रहे हैं? :e!ऐसा होगा
जैस्पर

1
मुझे लगता है कि :e!अगर आपने अंतिम सही स्थिति के बाद से बचत नहीं की है, तो बुरा होगा और uयदि आप सामान का एक गुच्छा टाइप करते हैं तो यह अपर्याप्त हो सकता है। (यदि आप टाइप करते हैं date month, उदाहरण के लिए, तो आपने एक टैग हटा दिया होगा, एक चिह्न सेट किया होगा, और एक खोज की होगी, जो कि पूर्ववत करने के लिए काफी भ्रामक होगा u।)
wchargin

1
@Chargin uअनुक्रम का हिस्सा होने के बारे में नहीं बोल रहा, बीच में कुछ पूर्व प्रदर्शन कर रहा था।
यो '

जवाबों:


14

आह्वान

:undolist

यह देखने के लिए कि आपने परिवर्तनों का अंतिम सेट कब बनाया था। यदि यह कहता है कि कुछ बदलाव किए गए थे, उदाहरण के लिए, "3 सेकंड पहले", और आप जानते हैं कि आपने केवल जानबूझकर इसे बदल दिया है, कहते हैं, एक मिनट पहले, फिर निष्पादित करें

:earlier 10s

इच्छित स्थिति में वापस जाने के लिए। अन्यथा, यदि हाल के बदलाव नहीं हुए हैं, तो आपको कुछ भी करने की आवश्यकता नहीं है।


आगे के संदर्भ: :help undo-tree


4

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

आप इसे प्राप्त करने के लिए मौजूदा vim सुविधा को संयोजित करते हैं। उदाहरण के लिए, आप एक फ़ंक्शन को परिभाषित कर सकते हैं जैसे:

" Function: View changes after the last save
function! s:DiffSinceSave()
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
  exe "normal! ]c"
endfunction
com! DiffSaved call s:DiffSinceSave()

आप इसे बाद में कॉल कर सकते हैं और यहां तक ​​कि एक शॉर्टकट कुंजी भी मैप कर सकते हैं।

" Map key to function: View changes after the last save
nnoremap <leader>? :DiffSaved<CR>

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

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

मुझे उम्मीद है कि आपको यह काम का लगेगा। मैंने इस समाधान को कुछ समय पहले इंटरनेट पर पाए जाने वाले स्निपेट से लिया था जिसमें विम विकिया भी शामिल था। तो यही कारण है कि कोई भी क्रेडिट बकाया है।


3

ऐसा लगता है कि uजब तक आप एक बदलाव को रखना चाहते हैं, तब तक प्रेस करने के लिए मुझे इसका सरल उत्तर है Ctrl-R


0

@Superjer की तरह, मैं uतब तक दबाता रहता हूं जब तक कि [+]मेरी स्थिति रेखा में लाल मार्कर गायब नहीं हो जाता।

set statusline=%f\ %#Error#%m%##

यह अच्छा हो सकता है कि पूर्ववत अंतिम स्थिति में स्वचालित रूप से पूर्ववत करने की कुंजी हो। लेकिन :e!एक अच्छा समाधान भी है; इन दिनों विम इतिहास में अपने "त्याग" परिवर्तनों को भी रखेगा।
joeytwiddle

5
वह आज्ञा है :earlier 1f1f"1 पिछली सहेजी गई स्थिति" का अर्थ है, इसलिए यह पिछली बार जब आप फ़ाइल को सहेजेंगे तो वापस चले जाएंगे। यदि बफ़र संशोधित किया गया है, तो वह सभी संशोधनों को पूर्ववत् करता है। यदि बफर संशोधित नहीं किया गया है (यानी, यह वर्तमान में एक सहेजे गए स्थिति में है), तो यह उस समय तक जाएगा जब आपने फ़ाइल को सहेजा था।
jamessan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.