डिफ़ॉल्ट रूप से, vim
मेरी परियोजना निर्देशिका में स्वैप फ़ाइलें छोड़ देता है, और क्रैश पर यह बैकअप फ़ाइलों को छोड़ देता है।
क्या मैं इसे रोक सकता हूं? या क्या मुझे अपनी सभी परियोजनाओं की .VCSignore
फाइल को अपडेट करने की आवश्यकता है ?
डिफ़ॉल्ट रूप से, vim
मेरी परियोजना निर्देशिका में स्वैप फ़ाइलें छोड़ देता है, और क्रैश पर यह बैकअप फ़ाइलों को छोड़ देता है।
क्या मैं इसे रोक सकता हूं? या क्या मुझे अपनी सभी परियोजनाओं की .VCSignore
फाइल को अपडेट करने की आवश्यकता है ?
जवाबों:
डिफ़ॉल्ट रूप से, विम बैकअप फ़ाइलों को पीछे नहीं छोड़ता है। वे केवल क्षणिक फाइलें हैं जो विम के बफर को डिस्क में सहेज रही हैं। जैसा कि :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'
। यदि बफर अनमॉडिफाइड है, तो एक और विम बिना सूचना के इसे संपादित करना शुरू कर सकता है। यदि दूसरा विम पहले से अधिक परिवर्तन करने से पहले बचाता है, तो उन्हें तब तक ध्यान नहीं दिया जाएगा जब तक कि उपयोगकर्ता सहेजने की कोशिश नहीं करता है या फ़ाइल को संशोधित करने की जांच करने के लिए विम को ट्रिगर करता है।
मैं .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
यह वही है जो मैं अपने 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
अक्सर रिबूट पर मंजूरी दे दी जाती है। आप शायद इस निर्देशिका को विश्व-योग्य नहीं चाहते हैं, क्योंकि जब आप एक फ़ाइल खोलते हैं तो लोग संभावित रूप से हानिकारक चीजें करने के लिए वहां फाइलें रख सकते हैं।
adduser
या उपयोगकर्ताओं को बनाने के लिए जो भी उपयोग कर रहे हैं, उसमें जोड़ना चाहते हैं। किसी भी मामले में, ज्यादातर लोग विश्वसनीय मशीनों पर विम का उपयोग करते हैं (लेकिन आपकी टिप्पणी एक अच्छी है, जैसे कि)।
$HOME
कहीं और क्यों नहीं डालते हैं ।
/var/
एक अलग फाइल सिस्टम है। सिद्धांत यह है कि उस पर राईट का एक बहुत नहीं कर पाएगा /
, /usr
या /home
, कम विखंडन और एक दुर्घटना के मामले में फ़ाइल भ्रष्टाचार के जोखिम के लिए अग्रणी ... यह भी कारण है कि मेलबॉक्स और सामान पर कर रहे हैं /var
डिफ़ॉल्ट रूप से, और में नहीं होमेडिर ...
/var/tmp
हमेशा विश्व-योग्य है - यह एक प्रणाली अस्थायी निर्देशिका है। (ठीक है, आप इसे बदल सकते हैं नहीं, लेकिन यह उन चीजों में से एक है जहां यूनिक्स जैसी प्रणालियां आपको इसे तोड़ने के बाद टुकड़ों को रखने की अनुमति देती हैं)। यदि आपके पास सिस्टम पर कोई अन्य उपयोगकर्ता है, तो वह/var/tmp/vim_«your_username»
अपनी पसंद की अनुमतियों के साथ बना सकता है । और फिर इसे अपनी महत्वपूर्ण फाइलों के साथ सहानुभूति के साथ भरें, जो संभवतः विम टेम्पोफाइल्स द्वारा नष्ट हो जाएंगे।