git vim अस्थायी फ़ाइलों को अनदेखा करें


238

सभी निर्देशिकाओं में विम द्वारा उत्पादित अस्थायी फ़ाइलों को अनदेखा करने का सही तरीका क्या है (या तो सिस्टम में वैश्विक स्तर पर या स्थानीय रूप से एकल प्रोजेक्ट के लिए)?


6
पैटर्न *.sw?मानक हल करता है, .swpलेकिन वैकल्पिक स्वैप फ़ाइल एक्सटेंशन भी पसंद करता है .swo
19

7
@ आपके सुझाव पर भी .swfफाइलों पर ध्यान नहीं दिया जाएगा । मैं दृढ़ता से ऐसा करने को हतोत्साहित करूंगा, खासकर यदि आप एक फ्लैश ऐप बना रहे हैं।
Stephenmurdoch

1
@marflar गुड पॉइंट। छिपी हुई फ़ाइल के साथ उपसर्ग के समान पैटर्न .को हालांकि इसे रोकना चाहिए।
बुली

मैंने आज एक .swx भी देखा।
रिचर्ड

2
प्रयोग से पता चलता है कि 16 बैकअप फ़ाइलें बनाने के बाद ( .tmp.swp, .tmp.swo, ..., .tmp.swa), vim बनाता है .tmp.svz। मुझे यह देखने के लिए धैर्य की कमी है कि क्या आता है .tmp.saa- शायद .tmp.rzz? अद्यतन: स्रोत ( src/memline.c, फ़ंक्शन findswapname()) को देखते हुए, यह .saaएक त्रुटि के बाद छोड़ देता है : "E326: बहुत अधिक स्वैप फ़ाइलें"।
कीथ थॉम्पसन

जवाबों:


391

Vim अस्थायी फ़ाइलें ~ के साथ समाप्त होती हैं ताकि आप फ़ाइल .gitignoreलाइन में जोड़ सकें

*~

विम भी स्वैप फाइल बनाता है जिसमें स्वैप और स्वो एक्सटेंशन होते हैं। लाइनों का उपयोग करने वालों को हटाने के लिए:

*.swp
*.swo

यह किसी एकल प्रोजेक्ट में सभी विम अस्थायी फ़ाइलों की उपेक्षा करेगा

यदि आप इसे विश्व स्तर पर करना चाहते हैं, तो आप अपने घर में एक .gitignore फ़ाइल बना सकते हैं (आप इसे अन्य नाम या स्थान दे सकते हैं), और निम्न कमांड का उपयोग कर सकते हैं:

git config --global core.excludesfile ~/.gitignore

फिर आपको केवल उन फ़ाइलों को जोड़ना होगा जिन्हें आप उस फ़ाइल को अनदेखा करना चाहते हैं


30
विम क्रमिक रूप से नाम स्वैप फ़ाइलें (.swp, .swo, आदि) बनाएंगे, इसलिए मैं उन सभी को छिपाने के लिए .*.sw*अपने उपयोग में लाता हूं .gitignore
ड्रयू स्टीफंस

32
@DrewStephens, मेरा मानना ​​है .*.sw?कि यह अधिक सटीक है। (हालांकि, मैंने देखा है कि लोग *.sw*संदेह के कुछ प्रकार का उपयोग कर रहे हैं मैं वास्तव में स्पष्ट कुछ याद कर रहा हूँ ...)
मोर्टेन साइबूहर

10
@Morten vimdoc.sourceforge.net/htmldoc/recover.html ,। * ?? ?? के अनुसार उन सभी को यूनिक्स (.s। ?? से वृद्धि .swp से .saa) पर पकड़ लेगा।
मैक्स नानसी

6
बस @MatrixFrog उत्कृष्ट टिप्पणी पर थोड़ा विस्तार करने के लिए - के बाद से इस सवाल का vim के लिए है आपको लगता है कि इस परियोजना में सही .gitignore पा सकते हैं यहाँ
स्नैपशॉट

17
सावधान रहे। github की फ़ाइलों .*.s[a-w][a-z]को अनदेखा करेगा .svg
जॉन

118

वैकल्पिक रूप से आप स्वैप को एक अलग स्थान पर सहेजने के लिए कॉन्फ़िगर कर सकते हैं, उदाहरण के लिए अपनी .vimrcफ़ाइल के लिए इसी तरह की लाइनें जोड़कर :

set backupdir=$TEMP//
set directory=$TEMP//

अधिक जानकारी के लिए इस विम टिप को देखें ।


8
ध्यान दें, मैक ओएस एक्स में, आप $TMPDIRवास्तविक टेंपर्ड पाने के लिए उपयोग कर सकते हैं :)
एलेक्स मूर-नीमी

5
आपकी पसंदीदा निर्देशिका के बाद डबल फ़ॉरवर्ड स्लैश (मैं ~ / tmp // का उपयोग करता हूं) फ़ाइल नामकरण टकराव को पूर्ण पथ संग्रहीत करके रोकता है। इस तरह, आप अभी भी नाम की फ़ाइलों को संपादित कर सकते हैं, उदाहरण के लिए, एक ही समय में दो निर्देशिकाओं में config.xml।
ब्रायन

1
क्या $TEMPमतलब है?
थीमफील्ड

नोट मुझे भी जोड़ना था set undodir=$TEMP//, क्योंकि मैं लगातार पूर्ववत फ़ाइलों को भी सहेजता हूं।
मीका लिंडस्ट्रॉम

24

यह कुछ ऐसा है जो केवल प्रति-उपयोगकर्ता के आधार पर किया जाना चाहिए, प्रति-रिपॉजिटरी पर नहीं। यदि जो इमाक्स का उपयोग करता है, वह चाहता है कि इमेक्स बैकअप फाइलों को नजरअंदाज कर दिया जाए, लेकिन बेट्टी (जो वीआई का उपयोग करता है) vi बैकअप फाइलों को अनदेखा करना चाहते हैं (कई मामलों में, वे समान हैं, लेकिन अस्तित्व में लगभग 24,893 आम संपादक हैं और यह सुंदर है सभी विभिन्न बैकअप एक्सटेंशनों को अनदेखा करने की कोशिश करना हास्यास्पद है।)

दूसरे शब्दों में, में कुछ भी डाल नहीं .gitignoreया में core.excludesमें $GIT_DIR/config$HOME/.gitconfigइसके बजाय जानकारी डालें (के रूप में nunopolonia के साथ सुझाव देता है --global।) ध्यान दें कि "वैश्विक" का अर्थ प्रति-उपयोगकर्ता है, प्रति-सिस्टम नहीं।

यदि आप सभी उपयोगकर्ताओं के लिए सिस्टम में कॉन्फ़िगरेशन चाहते हैं (जो आप नहीं करते हैं), तो आपको एक अलग तंत्र की आवश्यकता होगी। (संभवतः रिपॉजिटरी के आरंभ से पहले टेम्प्लेट सेटअप के साथ।)


3
जाहिरा तौर पर, बेट्टी जो :-) की तुलना में बहुत चालाक है। अच्छी सलाह और एक वोट के योग्य, भले ही मैंने मार्टिनल के उत्तर का उपयोग करके समाप्त कर दिया (इसे गिट के बजाय विम में ठीक करना)।
paxdiablo


5

"Git कमिट" से पहले vim से बाहर निकलें।

vimबैकअप फ़ाइलों के लिए अन्य फ़ोल्डर का उपयोग करने के लिए , ( /tmpउदाहरण के लिए):

set bdir-=.
set bdir+=/tmp

.swp फ़ाइलों के लिए वर्तमान फ़ोल्डर का उपयोग करना बंद करने के लिए:

set dir-=.
set dir+=/tmp

उपयोग -=, +=आम तौर पर अच्छा होगा, क्योंकि विम में बीडीआर, डीआईआर के लिए अन्य चूक हैं , हम सभी को स्पष्ट नहीं करना चाहते हैं। Bdir, dir के बारे में अधिक जानने के लिए vim सहायता की जाँच करें :

:h bdir
:h dir

5
सावधान रहें कि आप अपनी विम स्वैप फ़ाइलों को कहाँ स्टोर करते हैं। आप गलती से क्रेडेंशियल या अन्य डेटा को आपके द्वारा संपादित की जा रही फ़ाइल से लीक कर सकते हैं: security.stackexchange.com/questions/65883/…
Mnebuerquo

5

यहाँ वास्तविक VIM कोड है जो स्वैप फ़ाइल एक्सटेंशन बनाता है:

/* 
 * Change the ".swp" extension to find another file that can be used. 
 * First decrement the last char: ".swo", ".swn", etc. 
 * If that still isn't enough decrement the last but one char: ".svz" 
 * Can happen when editing many "No Name" buffers. 
 */
if (fname[n - 1] == 'a')        /* ".s?a" */
{   
    if (fname[n - 2] == 'a')    /* ".saa": tried enough, give up */
    {   
        EMSG(_("E326: Too many swap files found"));
        vim_free(fname);
        fname = NULL;
        break;  
    }
    --fname[n - 2];             /* ".svz", ".suz", etc. */
    fname[n - 1] = 'z' + 1;
}
--fname[n - 1];                 /* ".swo", ".swn", etc. */

यह प्रारूप की स्वैप फाइलें उत्पन्न करेगा:

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

जो कि बहुत ज्यादा है, जो वीआईएम के लिए गीथब की अपनी गिगिनटोर फाइल में शामिल है ।

जैसा कि अन्य लोगों ने सही ढंग से नोट किया है, यह .ignignore .svg छवि फ़ाइलों और .swf एडोब फ़्लैश फाइलों को भी नजरअंदाज करेगा ।


3

मैंने पाया कि इसने vim द्वारा बनाई गई अस्थायी फ़ाइलों को अनदेखा किया होगा:

[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~

इसे यहां भी देखा जा सकता है


5
यह उन pesky .swfफाइलों को भी नजरअंदाज कर देगा, जो जब भी आप फ्लैश ऐप बनाते हैं तो पॉप अप करते रहते हैं।
Stephenmurdoch

जो तब तक ठीक काम करता है जब तक आपको अपनी फ़्लैश फ़ाइलों में जांच करने के लिए डेवलपर की आवश्यकता न हो :-)
paxdiablo

1
यह अनदेखी करेगा .svgजो एक समस्या हो सकती है।
ब्रूनो ब्रोंस्की

1
*.un~आपके पास*~
ब्रूनो ब्रोंस्की

2

ज़रूर,

बस अपने प्रोजेक्ट के होम डायरेक्टरी पर एक ".gitignore" बनाना होगा और उसमें शामिल होना होगा

*.swp

बस

एक आदेश में

project-home-directory$ echo '*.swp' >> .gitignore

4
मुझे लगता echo *.swp >> .gitignoreहै कि पिछले .gitignore के ओवरराइड से बचना बेहतर है।
सीज़र ए। रिवास

2
आप चाहते हैं कि शेल '*' का विस्तार न करे। तो, उपयोग करेंecho '*.swp' >> .gitignore
संपादित

आप गलती से उन >पात्रों में से एक को याद नहीं करना चाहते हैं । मैंने एक बार उस passwdफाइल को किया था फिर लॉग आउट किया :-)
paxdiablo

2
# VIM: Temperory files
*~

# VIM: Swap-files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]

# VIM: Commands :cs, :ctags
tags
cscope.*

# VIM session
Session.vim

# VIM: netrw.vim: Network oriented reading, writing, browsing (eg: ftp scp) 
.netrwhist

स्वैप फ़ाइल का नाम आम तौर पर आपके द्वारा संपादित फ़ाइल के समान ही होता है, एक्सटेंशन ".swp" के साथ।

  • यूनिक्स पर, एक '।' संपादित फ़ाइल के समान निर्देशिका में फ़ाइल नाम स्वैप करने के लिए तैयार है। यह टालता है कि स्वैप फ़ाइल एक निर्देशिका लिस्टिंग में दिखाई देती है।
  • MS-DOS मशीनों पर और जब 'shortname' विकल्प चालू होता है, कोई भी। ' मूल फ़ाइल नाम में '_' के साथ प्रतिस्थापित किया गया है।
  • यदि यह फ़ाइल पहले से मौजूद है (जैसे, जब आप किसी दुर्घटना से उबर रहे हैं) तो एक चेतावनी दी जाती है और दूसरे एक्सटेंशन का उपयोग किया जाता है, ".swo", ".swn", आदि।
  • एक मौजूदा फ़ाइल को कभी भी अधिलेखित नहीं किया जाएगा।
  • जैसे ही विम फाइल को एडिट करना बंद करता है, स्वैप फाइल डिलीट हो जाती है।

'' का प्रतिस्थापन। MS-DOS संगत फाइल सिस्टम (जैसे, क्रॉसडोस, मल्टीडोस) के साथ समस्याओं से बचने के लिए '_' किया जाता है।

http://vimdoc.sourceforge.net/htmldoc/recover.html

http://www.vim.org/scripts/script.php?script_id=1075


0

Myy के मामले में अस्थायी फाइलें पहले से ही पिछली कार्रवाइयों द्वारा शुरू की जाती हैं, इसलिए संशोधित .gitignore उन कमिटेड फाइलों को प्रभावित नहीं करेगा ..., आपको git rm files_to_be_ignored --cacheपहले, फिर कमिट करना होगा, फिर किया।


0

यह एलेक्स मूर-नीमी द्वारा वर्णित मैक पर काम करता है:

set backupdir=$TMPDIR//
set directory=$TMPDIR//

उपयोग करना सुनिश्चित करें TMPDIRऔर नहीं TEMPDIR


-4

यदि आप स्रोत नियंत्रण का उपयोग कर रहे हैं। विम टेम्प फाइलें काफी बेकार हैं।
इसलिए आप उन्हें बनाने के लिए नहीं कॉन्फ़िगर करना चाहते हैं।

बस अपना ~ / .vimrc संपादित करें और इन पंक्तियों को जोड़ें:

set nobackup
set noswapfile

6
स्रोत नियंत्रण या तो बैकअप या विम के स्वैपफाइल्स के समान ग्रैन्युलैरिटी पर काम नहीं करता है। यहां तक ​​कि अगर आप हर बचाने के बाद (या वर्णों की एक निश्चित संख्या या सेकंड के बाद - वीम के स्वैपफाइल्स आपको क्या देते हैं, का एक सरलीकरण), यह अभी भी अत्यधिक संभावना है कि आप उन फ़ाइलों को संपादित करना चाहते हैं जो स्रोत नियंत्रित नहीं हैं (बैकअप के लिए) और swapfiles अभी भी वांछनीय हैं)।
क्रिस जॉन्सन

8
VIM अस्थायी फ़ाइलें संपादक क्रैश और कई अन्य कारणों से बेहद उपयोगी हैं। उन्हें बंद करके बच्चे को स्नान के पानी के साथ बाहर फेंक रहे हैं।
ब्रायन रीमैन

5
@ अरनीस, एक पावर आउटेज? या आपका एक्स सेशन किसी कारण से मर जाना। vim अस्थायी फ़ाइलें बहुत महत्वपूर्ण हैं IMO।
०२ पर जर्दिको २ j

1
@jrdioko एक्स दुर्घटना का कारण है कि कोई क्यों उपयोग करना चाहता है screen(या dtachयदि वह सभी स्क्रीन सुविधाएँ नहीं चाहता है)। पावर आउटेज को यूपीएस द्वारा नियंत्रित किया जाता है। बैकअप {सभी महत्वपूर्ण फाइलों का बैकअप लेने के लिए आपके पसंदीदा सॉफ्टवेयर} द्वारा किया जाता है। जब मैं पहले से संपादित की गई फ़ाइलों को संपादित करने का प्रयास करता हूं, तो मैं अधिसूचित होने के लिए स्वैप फ़ाइलों का उपयोग करता हूं, बैकअप के साथ N + 1'th स्थान होने के कारण नुकसान नहीं पहुंचाता है और फ़ाइलों को पूर्ववत करें क्योंकि लगातार पूर्ववत करना आसान है। केवल पूर्ववत फ़ाइलें मेरे लिए थोड़ी महत्वपूर्ण हैं।
ZyX

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