मैं कई फ़ाइलों (जैसे स्वैप, बैकअप, पूर्ववत) को छोड़ने से विम को कैसे रोक सकता हूं?


13

डिफ़ॉल्ट रूप से, vimमेरी परियोजना निर्देशिका में स्वैप फ़ाइलें छोड़ देता है, और क्रैश पर यह बैकअप फ़ाइलों को छोड़ देता है।

क्या मैं इसे रोक सकता हूं? या क्या मुझे अपनी सभी परियोजनाओं की .VCSignoreफाइल को अपडेट करने की आवश्यकता है ?

जवाबों:


16

बैकअप फ़ाइलें

डिफ़ॉल्ट रूप से, विम बैकअप फ़ाइलों को पीछे नहीं छोड़ता है। वे केवल क्षणिक फाइलें हैं जो विम के बफर को डिस्क में सहेज रही हैं। जैसा कि :help backup-tableइस व्यवहार में वर्णित है 'backup'और 'writebackup'विकल्पों द्वारा नियंत्रित किया जा सकता है :

'backup' 'writebackup'  action  ~
   off       off    no backup made
   off       on     backup current file, deleted afterwards (default)
   on        off    delete old backup, backup current file
   on        on     delete old backup, backup current file

फ़ाइलें स्वैप करें

स्वैप फ़ाइलों के लिए, उन्हें एक समर्पित निर्देशिका में इकट्ठा करना उपयोगी हो सकता है। यह 'directory'विकल्प के साथ किया जा सकता है । उदाहरण के लिए

:set directory^=$HOME/.vim/tmp//

उन $HOME/.vim/tmpनिर्देशिकाओं की सूची के प्रमुख में जोड़ देगा जिन्हें विम एक स्वैप फ़ाइल बनाते समय उपयोग करने का प्रयास करेगा। अनुगामी //बनाता है Vim फ़ाइल के लिए पूरे पथ का नाम सांकेतिक शब्दों में बदलना, इसलिए विभिन्न निर्देशिकाओं से समान नाम वाली फ़ाइलों के साथ टकराव नहीं हैं।

कैविएट : यह प्रभावी रूप से विम के लिए नोटिस करने की क्षमता को निष्क्रिय कर देता है यदि कई उपयोगकर्ता एक ही फाइल को संपादित करने की कोशिश कर रहे हैं क्योंकि स्वैप फाइलें विभिन्न स्थानों में संग्रहीत हैं।

नीचे दिया गया स्निपेट ( tpope के vimrc से अनुकूलित ) एक बफर के लिए स्वैप फ़ाइल को भी अक्षम कर देगा, जब यह संशोधित नहीं होगा, इस तरह यदि विम / आपका कंप्यूटर क्रैश हो जाता है जब आपके पास फ़ाइलों का एक गुच्छा होता है, तो पीछे छोड़ गई स्वैप फाइलें केवल होंगी संशोधित फ़ाइलों के लिए।

autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
  \ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif

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


5

मैं .vimrcसाझा सर्वर सहित कई मशीनों पर अपना उपयोग करता हूं । मैं जरूरी नहीं चाहता कि लोग उन फाइलों को देख सकें जो मैं काम कर रहा हूं और मुझे अपनी होम डायरेक्टरी को अपेक्षाकृत साफ रखना पसंद है। तो यह मेरा समाधान है जो लिनक्स और मैक ओएस एक्स पर ठीक काम करेगा।

" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
  :silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif

set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,

ध्यान दें कि अगर यह पहले से मौजूद नहीं है, तो यह एक .tmpनिर्देशिका बनाएगा ~/.vim। यह आपके स्वैप फ़ाइलों का नया घर होगा। पूर्ववत फ़ाइलों के लिए, मेरे पास भी निम्नलिखित है .vimrc(जो कि बहुत समान है):

if exists("+undofile")
  " undofile -- This allows you to use undos after exiting and 
  "             restarting. NOTE: only present in 7.3+
  "             :help undo-persistence
  if isdirectory( $HOME . '/.vim/.undo' ) == 0
    :silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
  endif
  set undodir=~/.vim/.undo
  set undofile
endif

1

यह वही है जो मैं अपने vimrc में करता हूं:

fun! MkdirIfNeeded(dir, flags, permissions)
    if !isdirectory(a:dir)
        call mkdir(a:dir, a:flags, a:permissions)
    endif
endfun

" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
    let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
    let tmpdir = 'C:/tmp/vim_' . whoami
else
    let whoami = substitute(system("whoami"), '\n', '', '')
    let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)

let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir

यह /var/tmp/vim_<username>सभी विम-संबंधित फ़ाइलों को संग्रहीत करने के लिए इसका निर्माण और उपयोग करेगा । अपने प्रोजेक्ट डायरेक्टरी को साफ रखना।

उपयोग करना whoamiसुनिश्चित करता है कि आप अलग-अलग निर्देशिकाओं का उपयोग करते हुए विश्व स्तर पर (उपयोगकर्ता और रूट के लिए) vimrc का उपयोग कर सकते हैं; यदि आपको इसकी आवश्यकता नहीं है, तो आप इसे तेजी से स्टार्टअप के लिए एक हार्ड कोडित निर्देशिका से बदल सकते हैं। आप ~/.vim/निर्देशिका का उपयोग भी कर सकते हैं , लेकिन मुझे /var/tmpइसका उपयोग करना पसंद है क्योंकि यह आमतौर पर एक अलग फाइल सिस्टम है।

मैं उपयोग करता हूं /var/tmpक्योंकि /tmpअक्सर रिबूट पर मंजूरी दे दी जाती है। आप शायद इस निर्देशिका को विश्व-योग्य नहीं चाहते हैं, क्योंकि जब आप एक फ़ाइल खोलते हैं तो लोग संभावित रूप से हानिकारक चीजें करने के लिए वहां फाइलें रख सकते हैं।


1
/var/tmpहमेशा विश्व-योग्य है - यह एक प्रणाली अस्थायी निर्देशिका है। (ठीक है, आप इसे बदल सकते हैं नहीं, लेकिन यह उन चीजों में से एक है जहां यूनिक्स जैसी प्रणालियां आपको इसे तोड़ने के बाद टुकड़ों को रखने की अनुमति देती हैं)। यदि आपके पास सिस्टम पर कोई अन्य उपयोगकर्ता है, तो वह /var/tmp/vim_«your_username»अपनी पसंद की अनुमतियों के साथ बना सकता है । और फिर इसे अपनी महत्वपूर्ण फाइलों के साथ सहानुभूति के साथ भरें, जो संभवतः विम टेम्पोफाइल्स द्वारा नष्ट हो जाएंगे।
derobert

@derobert केवल अगर यह मौजूद नहीं है। यदि आप इस सिस्टम-वाइड और बहुत से उपयोगकर्ताओं का उपयोग करते हैं, तो आप संभवतः इस निर्देशिका के निर्माण को adduserया उपयोगकर्ताओं को बनाने के लिए जो भी उपयोग कर रहे हैं, उसमें जोड़ना चाहते हैं। किसी भी मामले में, ज्यादातर लोग विश्वसनीय मशीनों पर विम का उपयोग करते हैं (लेकिन आपकी टिप्पणी एक अच्छी है, जैसे कि)।
मार्टिन टूरनोइज

सही है, केवल अगर यह मौजूद नहीं है। जो कि एक सिस्टम अस्थायी निर्देशिका में होने के कारण अप्रत्याशित रूप से तब होता है जब उन टेंपफाइल्स को साफ किया जाता है। यकीन नहीं है कि आप इसे $HOMEकहीं और क्यों नहीं डालते हैं ।
derobert

@derobert खैर, /var/एक अलग फाइल सिस्टम है। सिद्धांत यह है कि उस पर राईट का एक बहुत नहीं कर पाएगा /, /usrया /home, कम विखंडन और एक दुर्घटना के मामले में फ़ाइल भ्रष्टाचार के जोखिम के लिए अग्रणी ... यह भी कारण है कि मेलबॉक्स और सामान पर कर रहे हैं /varडिफ़ॉल्ट रूप से, और में नहीं होमेडिर ...
मार्टिन टूरनोइज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.