मैं एक अलग उपकरण के रूप में विम का उपयोग कैसे करूं?


101

मैं अपने प्राथमिक संपादक के रूप में विम का उपयोग करता हूं।

मैं फ़ाइलों को बदलने और आसान बदलावों को ठीक करने के लिए फ़ाइलों को संशोधित करने के लिए विम का उपयोग करना चाहूंगा (बल्कि सबसे अलग तकनीकों की तुलना में जो कि अंतर / तय / अलग / फिक्स का एक चक्र है)।

इसके अतिरिक्त स्रोत नियंत्रण उपकरण / साइटों (मैं विशेष रूप से गिट के बारे में सोच रहा हूँ, लेकिन मैं अन्य लोगों को अन्य स्रोत नियंत्रण उपकरण / साइटों के साथ एकीकरण में दिलचस्पी होगी यकीन है कि मैं सोच रहा हूँ) द्वारा इस्तेमाल किया उपकरणों में अंतर को एकीकृत करने के लिए आसान तरीके हैं।


1
यदि आप कमांड को जोड़ते हैं, तो आपको विम-फ़्यूगिटिव की कोशिश करनी चाहिए :Gdiffऔर :Gvdiffदोनों कमांड आपको वर्तमान बफर के साइड-साइड को देखने देती हैं यदि आपका वर्तमान बफर git द्वारा प्रबंधित किया जाता है। जब आप कुछ फाइलों पर विवादों को मिलाते हैं, तो यह आपको तीन विंडो लेआउट में संघर्ष को हल करने के लिए
प्रेरित

मेरे पास मेरे bashrc में यह सरल कार्य है vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }और मैं इसके साथ आह्वान करता हूं vd file1 file2। यह diffनिर्धारित करने के लिए उपयोग करता है कि क्या फाइलें अलग हैं और केवल तभी खुलती है vimdiffयदि ऐसा है। अन्यथा, मैं खोल में रहता हूं। मैं विम में हाइलाइटिंग सिंटैक्स को भी अक्षम करता हूं क्योंकि मैं इसे अलग करते समय विचलित पाता हूं। केवल दो फाइलों के साथ काम करता है।
रॉल्फ

जवाबों:


122

vim में यह कार्यक्षमता है (सही कमांड लाइन ध्वज के साथ)।

vim -d <file1> <file2>

यह प्रत्येक फ़ाइल को एक दृश्य में खोलता है और अंतरों पर प्रकाश डालता है।
कोई भी कोड जो समान है वह foldedदूर है इसलिए आपको समान कोड देखने या समान कोड के विशाल भाग से स्क्रॉल करने की आवश्यकता नहीं है।

लेकिन एक रैपर एप्लिकेशन भी है vimdiffजो सही झंडे के साथ सही ढंग से विम को आमंत्रित करता है।

vimdiff source1.cpp source2.cpp

यदि आप git का उपयोग कर रहे हैं तो आप एक बाहरी अंतर उपकरण सेट कर सकते हैं। इसलिए जीआईटी के लिए अलग उपकरण होने के लिए विम्डीफ को स्थापित करना आसान है।

git config --global diff.tool vimdiff

विमीडिफ का उपयोग करते समय आप दोनों ओर संपादित कर सकते हैं और अलग-अलग हाइलाइटिंग आपको अंतर दिखाने की गति बनाए रखता है।

नोट: जब git से संपादन भिन्न होता है। यदि आप कोशिश करते हैं और फ़ाइल के रिपॉजिटरी स्टोर किए गए संस्करण को संपादित करते हैं, तो आपके बाहर निकलने पर आपके बदलावों को छोड़ दिया जाएगा (git आपको मूल के साथ भरोसा नहीं करता है इसलिए आप tmp कॉपी के खिलाफ अलग हैं) लेकिन आप अपने दिल की सामग्री के लिए स्थानीय कॉपी को संपादित कर सकते हैं इसे आप वर्तमान संस्करण पर सहेजें।

कुछ बुनियादी कमांड जो उपयोगी हैं vimdiff

dp             diffput: puts changes under the cursor into the other file
                        making them identical (thus removing the diff).
do             diffget: (o => obtain). The change under the cursor is replaced
                        by the content of the other file making them identical.


]c             Jump to the next diff
[c             Jump to the previous diff

अन्य vim सेटिंग्स मैं vimdiff के साथ हाइलाइटिंग के साथ काम करने के लिए उपयोग करता हूं

if &diff
    highlight! link DiffText MatchParen
endif

यह कोड के बिट्स पर प्रकाश डाला जाता है जो बदल जाते हैं। इसलिए जो लाइन बदली जाती है, उसे हाइलाइट किया जाता है, ताकि मैं बदलावों को देख सकूं, लेकिन जो वास्तविक टेक्स्ट बदल गया है वह लाइन पर खड़ा है (जैसा कि इसे हाइलाइट नहीं किया गया है)।


इसके अलावा 4 बफ़र्स तक संभालता है, यह विन्यास फाइल की तुलना करने के लिए बहुत अच्छा बनाता है
इज़ाका

34
:diffthisजब विम पहले से ही चल रहा हो, तो आप एक डिस्क्रिप्शन शुरू करने के लिए कमांड का उपयोग भी कर सकते हैं ।
रिच

11
और: इसे बंद करने के लिए अलग करें। मुझे लगता है कि विम के दस्तावेज का लिंक फायदेमंद होगा: vimdoc.sourceforge.net/htmldoc/diff.html
कोडी पोल

1
मेरे बाद भी git config --global diff.tool vimdiff, git diffअभी भी सब कुछ दिखाता है जैसे कि मैं कुछ भी नहीं बदलता हूं।
हाय-एंजेल

2
कोशिशgit difftool
मार्टिन यॉर्क

13

यदि आप एक खुली फ़ाइल को संपादित कर रहे हैं और वर्तमान फ़ाइल को बंद किए बिना किसी अन्य फ़ाइल से तुलना करना चाहते हैं:

स्प्लिट स्क्रीन में नई फ़ाइल खोलें:

ऊर्ध्वाधर विभाजन के लिए:

:vs otherFile

या क्षैतिज विभाजन:

:split otherFile

विभक्त स्क्रीन पर कर्सर स्विच करें:

ctrl+w ctrl+w

फ़ाइल में "विधा मोड" आमंत्रित करें:

:diffthis

अन्य फ़ाइल पर स्विच करें और "विधा मोड" को लागू करें:

:diffthis

"विधा मोड" को बंद करने के लिए:

:diffoff

5
बफ़र्स आप उपयोग कर सकते हैं के बीच स्विच करने से बचने के लिए :windo diffthisभी
statox

4

आप वर्तमान में उपयोगकर्ता में लॉग की .gitconfigगई %homepath%(या %userprofile%) निर्देशिका में मिली फ़ाइल में उल्लिखित सेटिंग को नीचे रख सकते हैं :

[diff]
    tool = vimdiff

यह git bash टूल को बाहरी डिफरेंशियल टूल के रूप में vimdiff का उपयोग शुरू करने में सक्षम करेगा।



2

मैं केवल तीन स्थितियों को एक difftool के रूप में विम का उपयोग करने के लिए देख सकता हूं। उन्हें संक्षेप में नीचे वर्णित किया गया है:

  • Git difftool के लिए, अपने में निम्नलिखित डालें ~/.gitconfig:

    [core]
    editor = vim
    [diff]
    tool = vimdiff
    [merge]
    tool = vimdiff
    conflictstyle = diff3
    
  • दो फ़ाइल के लिए एक अलग उपकरण के रूप में विम खोलने के लिए, आप निम्न कार्य कर सकते हैं:

    vimdiff file1.ext file2.ext      # for vim
    nvim -d file1.ext file2.ext      # for neovim
    
  • वर्तमान में सक्रिय बफ़र्स के लिए अलग-अलग दृश्य प्राप्त करने के लिए, अर्थात सभी बफ़र्स जिनके पास वर्तमान में सक्रिय टैबपृष्ठ में उनके पास एक विंडो है, आप निम्न कार्य कर सकते हैं:

    :windo diffthis                " to get diff view
    :windo diffoff                 " to remove diff view
    

अधिक जानकारी के लिए देखें :h diff


1

यहाँ मैं क्या करूँ:

  • पहली फ़ाइल के साथ एक विंडो खोलें (या यदि आप डेटा चिपका रहे हैं तो पाठ सामग्री)
  • अगली फ़ाइल / विंडो का उपयोग करके खोलें :vnew(दोनों विंडो को साइड में करने के लिए) या :new(विंडोज़ टॉप और बॉटम के लिए)। यदि आपके पास दूसरी विंडो में खोलने के लिए एक विशिष्ट फ़ाइल है, तो आप इस तरह से पथ को शामिल कर सकते हैं::vnew /path/to/secondfile.txt
  • एक कस्टम फ़ंक्शन को चालू करने के लिए F8 का उपयोग करें जो भिन्न मोड को चालू और बंद करता है

यहाँ एक कस्टम फ़ंक्शन है जो मेरे में है ~/.vimrc:

nmap <silent> <F8> :call ToggleDiff()<CR>
imap <silent> <F8> <C-O>:call ToggleDiff()<CR>
function ToggleDiff ()
    if (&diff)
        set nodiff noscrollbind
    else
        " enable diff options in both windows; balance the sizes, too
        wincmd =
        set diff scrollbind nowrap number
        wincmd w
        set diff scrollbind nowrap number
        wincmd w
    endif
endfunction

आप कमांड का उपयोग कर सकते हैं :diffthisऔर diffoff!इसलिए आपको सभी अलग-अलग विकल्पों को स्वयं सेट करने की ज़रूरत नहीं है (उदाहरण के लिए कर्सरबिंड भी डिफमोड द्वारा सेट किया गया है)
क्रिश्चियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.