विम का लगातार पूर्ववत उपयोग करना?


96

Vim 7.3 में नई सुविधाओं में से एक 'लगातार पूर्ववत' है, जो बफर से बाहर निकलने पर अंडरोट्री को एक फ़ाइल में सहेजने की अनुमति देता है।

दुर्भाग्य से, मैं इसे ठीक से सक्षम नहीं कर पाया, या मुझे इसका गलत उपयोग करना चाहिए। यहाँ मैंने जो अब तक कोशिश की है:

मैंने निम्नलिखित को ~ / .vimrc पर जोड़ दिया

set undofile                " Save undos after file closes
set undodir=$HOME/.vim/undo " where to save undo histories
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

इसके बाद, मुझे माना जाता है कि किसी भी फ़ाइल को खोलने में सक्षम होना चाहिए, इसे संपादित करना, फिर इसे सहेजना-बंद करना, और जब मैं इसे फिर से खोलूंगा तो मुझे पूर्ववत / फिर से करने में सक्षम होना चाहिए जैसे कि मैंने कभी नहीं छोड़ा। दुर्भाग्य से, यह ऐसा प्रतीत नहीं होता है, क्योंकि कोई भी अपरिभाषित कभी नहीं लिखा गया है।

टिप्पणियाँ:

  1. मैं विन 7 पर विम 7 से क्रीम परियोजना के बिना विम 7 का उपयोग कर रहा हूं। लगातार पूर्ववत बेक किया हुआ है।

  2. मेरे फाइल सिस्टम पर $ HOME / .vim / undo मौजूद है


38
बस तनाव के लिए, बिंदु 2) बहुत महत्वपूर्ण है। विम आप और लगातार पूर्ववत करने के लिए निर्देशिका बनाने नहीं होगा जब तक आप काम नहीं करेगाmkdir ~/.vim/undo
PUK

2
+1। क्षमा करें, लिनक्स पर यह काम करता है ... मुझे इसके बारे में बताने के लिए धन्यवाद!
सिरो सेंटिल्ली 郝海东 冠状 iro 事件 法轮功

इस सवाल का कोई भविष्य आगंतुकों के लिए: Do नहीं undodir का मूल्य-पीछे उद्धरण चिह्न डाला! मैं थोड़ी देर के लिए इस समस्या पर अटक गया - एक निरपेक्ष paht का उपयोग करें, इसके चारों ओर उद्धरण के बिना।
naiveai

जवाबों:


51

अगर यह मौजूद नहीं है तो इसे .vimrcबनाने के लिए undodirइसे अपने अंदर रखें और लगातार पूर्ववत करें। विंडोज और लिनक्स दोनों पर परीक्षण किया गया।

" Put plugins and dictionaries in this dir (also on Windows)
let vimDir = '$HOME/.vim'
let &runtimepath.=','.vimDir

" Keep undo history across sessions by storing it in a file
if has('persistent_undo')
    let myUndoDir = expand(vimDir . '/undodir')
    " Create dirs
    call system('mkdir ' . vimDir)
    call system('mkdir ' . myUndoDir)
    let &undodir = myUndoDir
    set undofile
endif

5
निर्देशिका बनाने के लिए यह बेहतर हो सकता है::silent call system('mkdir -p ' . &undodir)
काइल स्ट्रैंड

1
मैं उपयोग करता हूं &क्योंकि मैं इसे टिंग setकरने के undodirबजाय करता हूं let। (मेरे मन में के बीच इस तरह के अंतर letऔर set। कई, कई, कई मन bogglingly भयंकर Vimscript, लेकिन YMMV के "सुविधाओं" में से एक है)
केली स्ट्रैंड

1
धन्यवाद काइल, यह बनाने के लिए एक अच्छा विचार है .vimअगर यह मौजूद नहीं है। दुर्भाग्य से -pध्वज विंडोज पर मौजूद नहीं है, इसलिए मैंने mkdirविंडोज संगतता सुनिश्चित करने के लिए दो बार कॉल का उत्तर संपादित किया ।
मथायस ब्रौन

2
आह। -pध्वज का उपयोग करने के लिए मेरा प्राथमिक कारण वास्तव में निर्देशिका मौजूद होने पर त्रुटि से बचने के लिए है। मेरे पास एक if has('win32')ब्लॉक के अंदर मेरी कमांड है , इसलिए मैं mkdirबिना -pविंडोज पर उपयोग करता हूं ।
काइल स्ट्रैंड

4
उपयोग क्यों नहीं mkdir()? तब यह बन सकता है: call mkdir(myUndoDir, 'p')जो व्यवहार करता है mkdir -p
नेलस्ट्रोम

8

मैंने अपने _gvimrc में यह कोशिश की:

" Persistent undo
try 
    set undodir=C:\vim\undodir
    set undofile
catch
endtry

जब मैंने कोशिश-कैच ब्रैकेट को हटा दिया, तब इसने विज्ञापन के रूप में काम करना शुरू कर दिया:

" Persistent undo
set undodir=C:\vim\undodir
set undofile

मुझे डायरेक्टरी बनानी थी।


if has('persistent_undo')
अरेलव

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
अरिलव

set undodir=~/.config/nvim/backups
अरिलव

1
endif"संदेश की लंबाई बढ़ाने के लिए टिप्पणी संदेश जोड़ना
अरैलव

3

मुझे लगता है कि $ HOME विज्ञापित के रूप में काम नहीं करता है।

मेरे सिस्टम पर, :echo $HOMEH: \ दिखाता है, लेकिन : e $HOME/कहता है: ~/अमान्य फ़ाइल नाम।

आप यह देखने के लिए कि क्या वह इसे ठीक करता है, एक निरपेक्ष मार्ग के साथ प्रयास कर सकता है


मैं कर सकता हूँ |: echo $ HOME | और |: e $ HOME / | समस्याओं के बिना, लेकिन मैं वैसे भी चीजों को बदलने की कोशिश की। यह समय पर काम करने के लिए लग रहा था, और दूसरों पर नहीं। विशेष रूप से, जब मैं अपनी ~ / .vimrc फ़ाइल को संपादित कर रहा हूं तो यह कभी भी बैकअप नहीं बचाता है।
डकवर्थ

विंडोज 7 पर मैं उपयोग कर रहा हूं $TEMP। जब मैं set undodir?इसे दिखाता हूं ~/AppData/Local/Temp। पूर्ववत फ़ाइल बनी रहती है और सही ढंग से लोड होती है। शायद $TEMPअधिक विश्वसनीय होगा?
slawek 10

1

यह अब अपेक्षित रूप से काम करता है: file.txtविंडोज 7 पर विम 7.4 बफर में खोलें :setlocal undofile, फिर बफर में बदलाव को सहेजें, और इसके .file.txt.un~साथ ही :set undodir?अनडॉफाइल बनाया जाता है क्योंकि रिपोर्ट करता है कि "undodir =।" डिफ़ॉल्ट रूप से - अर्थात इसे मैन्युअल रूप से निर्दिष्ट करने की आवश्यकता नहीं है। आप :set undofileएक मॉडल में भी कर सकते हैं ।

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