मैं केवल डीपी या केवल लाइनें कैसे करता हूं, विम में पूरे ब्लॉक में अंतर नहीं है?


28

मैं वर्तमान में MacVim (स्नैपशॉट 64) "स्प्लिट डिफ बाय ..." मेनू विकल्प का उपयोग कर रहा हूं।

फ़ाइल settings.pyसंस्करण 1.3 से एक ताजा फ़ाइल के लिए 1.3.1 संस्करण से Django के मेरे है।

स्क्रीनशॉट

मैं दो बुनियादी आदेशों को जानता हूं

  1. do दूसरी ओर से "ब्लॉक" (और प्रतिस्थापित) करने के लिए।
  2. dp "put" (और बदलें) दूसरी तरफ एक ब्लॉक।

लेकिन वे दो कमांड पूरे ब्लॉक को लिखते हैं, जो मैकविम में बैंगनी हाइलाइट है।

यदि आप 2 ब्लॉक को देखते हैं, तो आप देख सकते हैं कि लाइन 2 और 3 से केवल 2 शब्द हैं जो अलग हैं: mysiteऔर hobbes3। मैं सिर्फ प्रति पंक्ति नहीं पूरे ब्लॉक को बदलना चाहता हूं ।

तो पूरे ब्लॉक के विरोध के रूप में क्या करना है doऔर dpप्रति पंक्ति को बदलने की आज्ञा है या क्या मुझे इसे मैन्युअल रूप से टाइप करना है?

बोनस प्रश्न : मैंने देखा कि एक बार जब मैं मैन्युअल रूप से एक ब्लॉक को संपादित करता हूं, तो मैं बैंगनी हाइलाइटिंग खो देता हूं। मैं फ़ाइल को फिर से खोलने के बिना हाइलाइट को शामिल करने के लिए फिर से "ताज़ा" कैसे करूं?

कृपया मैक-विशिष्ट के विरोध के रूप में उत्तर-विम को सामान्य रखने का प्रयास करें।

जवाबों:


30

यह करने के कई तरीके हैं।

  1. गंतव्य बफ़र में उन पंक्तियों की श्रेणी का चयन करें जिन्हें आप स्रोत बफ़र से प्राप्त करना चाहते हैं और उपयोग करना चाहते हैं :diffget। उदाहरण के लिए, आप कई प्रकार की रेखाओं को नेत्रहीन रूप से चुन सकते हैं V, फिर टाइप कर सकते हैं :diffget
  2. स्रोत बफ़र में उन पंक्तियों की श्रेणी का चयन करें जिन्हें आप गंतव्य बफ़र में रखना चाहते हैं और उपयोग करना चाहते हैं :diffput। उदाहरण के लिए, वर्तमान लाइन को दूसरे बफर में डालने के लिए टाइप करें :.diffput
  3. यांक का प्रयोग करें और लगाएं। स्रोत बफर है कि आप गंतव्य बफर में प्रतिलिपि बनाना चाहते हैं, का उपयोग कर उन्हें झटका में लाइनों की श्रेणी का चयन Y, गंतव्य बफर करने के लिए कर्सर ले जाने और उन्हें डाल के साथ जहाँ आप उन्हें चाहते हैं pया P, तो लाइनों आप नहीं चाहते को हटा दें।
  4. ऊपर के रूप में हां, लेकिन गंतव्य बफ़र में, आप जिस लाइन को बदलना चाहते हैं उसकी सीमा का चयन करें (आवश्यक रूप से समान पंक्तियों की संख्या नहीं) और टाइप करें "0p। इसमें 0 (शून्य) रजिस्टर का उपयोग किया गया है जिसमें हमेशा सबसे हालिया यान का पाठ होता है।

उचित हाइलाइटिंग, निष्पादित :diffupdateया बस दिखाने के लिए प्रदर्शन को "ताज़ा" करने के लिए :diffu। कभी-कभी यह पर्याप्त नहीं होता है और आपको ताज़ा करने के लिए कर्सर को दूसरी विंडो में ले जाने की आवश्यकता होती है।

आप नकल के बारे में और अधिक पढ़ सकते हैं

:help copy-diffs

3

मैं एक अंतर के दौरान एक पंक्ति को एक अंतर के दौरान संशोधित करना चाहता था। इसलिए मैंने एक सरल नक्शा बनाया और उन्हें अपनी vimrc फाइल में डाला।

nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>

आप dg के बजाय इसका उपयोग कर सकते हैं, लेकिन मुझे [o] btain के बजाय "diffget" सोचने की आदत है।

आपके बोनस के लिए, मैं सिर्फ दो बार एक और सरल मानचित्र का उपयोग करता हूं:

nnoremap <silent> <leader>df :call DiffToggle()<CR>

अब, df डिफॉमोड पर / बंद हो जाएगा, इसलिए मैं इसे बंद और वापस चालू करता हूं।

और एक बोनस विकल्प जोड़ना है

nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

यह आपको दूसरी फ़ाइल / विंडो पर एक टाइपो या अवांछित परिवर्तन को पूर्ववत करने की अनुमति देगा, क्योंकि: केवल यू के पूर्व में केवल वर्तमान विंडो में परिवर्तन को पूर्ववत करना होगा।

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