2010-06-22 15 views
13

मुझे एहसास हुआ कि Control+S में :update कमांड के रूप में gvimमें। मैं हमेशा Ctrl+S का उपयोग करके सहेजता हूं, इसलिए मुझे लगता है कि :update "परिवर्तनों को रीफ्रेश करें" कहने का एक और तरीका है। :update मूल रूप से :w लिखने जैसा ही है? :w! के लिए :update को प्रतिस्थापित करने पर मुझे समस्याएं आ सकती हैं?विम में अपडेट और: डब्ल्यू के बीच क्या अंतर है?

संपादित करें: मैं becauase मैं एक फ़ाइल है कि कहते हैं है :w! को :update को बदलना चाहते हैं "रेडी-केवल ! जोड़ें।" और मुझे लगा कि यह एकमात्र समाधान

+0

आप अपडेट कमांड के साथ बैंग ('!') का उपयोग कर सकते हैं। – ZyX

उत्तर

4

मदद से किया गया था:

:[range]up[date][!] [++opt] [>>] [file] 
         Like ":write", but only write when the buffer has been 
         modified. {not in Vi} 
2

:help :update का कहना है:

की तरह ": लिखना", लेकिन केवल बारे में जब बफर संशोधित किया गया है।

15

:help :update उस पर बहुत स्पष्ट है:

Like ":write", but only write when the buffer has been modified. 

तो फ़ाइल केवल लिखित जाएगा अगर बफर की सामग्री को वास्तव में बदल दिया गया है। तो यदि आप :update (या GVim में Ctrl + S दबाएं) का उपयोग करते हैं और बफर में कोई सहेजे नहीं गए परिवर्तन हैं, तो यह कुछ भी नहीं करेगा।

+0

मैं ': help' का उपयोग करना भूल जाता हूं, और StackOverflow पर समाप्त होता हूं। इस जवाब में इसका जोर देना सहायक था। –

9

यहाँ एक और तरीका :write (शॉर्टकट :w) और :update (शॉर्टकट :up) के बीच अंतर समझाने के लिए है:

जब भी हम टाइप :w, विम सचमुच फाइल करने के लिए बफर लिखेंगे, कोई फर्क नहीं पड़ता बफर खाली है या नहीं। MEANs यह टाइमस्टैम्प को फ़ाइल के :w पर अपडेट किया जाएगा, भले ही फ़ाइल की सामग्री वास्तव में परिवर्तित नहीं हुई हो।

:up साथ रहते हुए, vim सहायता पुस्तिका जैसे कहते हैं, विम केवल टाइमस्टैम्प जब फ़ाइल बदल दिया गया है अद्यतन करेगा।


उदाहरण के लिए

, जब मैं सिर्फ पढ़ने के लिए एक फ़ाइल को खोलने, लेकिन मैं गलती से हो सकता है (या, आदतन) :w या :wq, टाइप करें और अगर मैं (यानी अंतिम संशोधित समय) फ़ाइल के timestamps के बारे में देखभाल कर , तो कोई मोड़ वापस नहीं है।निम्न उदाहरण (bash शेल में) दिखाने के प्रभाव:

$ touch test.txt 
$ 
$ stat test.txt 
     File: `test.txt' 
    Size: 0   Blocks: 0   IO Block: 4096 regular empty file 
Device: 811h/2065d Inode: 98828498 Links: 1 
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank) 
Access: 2014-03-15 22:30:52.159258193 +0800 
Modify: 2014-03-15 22:30:52.159258193 +0800 
Change: 2014-03-15 22:30:52.159258193 +0800 

अब फ़ाइल विम और क्रमशः :up और :w आदेश की कोशिश करते हैं:

$ vim test.txt 

संपादन मत करो, बस टाइप :up और फिर :q

$ stat test.txt 
    File: `test.txt' 
    Size: 0   Blocks: 0   IO Block: 4096 regular empty file 
Device: 811h/2065d Inode: 98828498 Links: 1 
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank) 
Access: 2014-03-15 22:33:10.002269244 +0800 <--- Different! 
Modify: 2014-03-15 22:30:52.159258193 +0800 <--- Didn't Change! 
Change: 2014-03-15 22:30:52.159258193 +0800 <--- Didn't Change! 

जैसा कि आप देख सकते हैं, केवल एक्सेस समय बदल गया है, ऐसा इसलिए है क्योंकि हम फ़ाइल में डेटा को पढ़ते हैं (एक्सेस) करते हैं। लेकिन संशोधित समय & परिवर्तन समय अभी भी वही है।


अब vim फिर चलो और :w आदेश का उपयोग करें।

$ vim test.txt 

संपादन नहीं है, लेकिन इस बार प्रकार :w और फिर :q

$ stat test.txt 
    File: `test.txt' 
    Size: 0   Blocks: 0   IO Block: 4096 regular empty file 
Device: 811h/2065d Inode: 98828538 Links: 1 
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank) 
Access: 2014-03-15 22:40:26.728239153 +0800 <--- Different Again! 
Modify: 2014-03-15 22:40:26.728239153 +0800 <--- Changed! 
Change: 2014-03-15 22:40:26.728239153 +0800 <--- Changed! 

अब हम :up और :w के बीच अंतर देख सकते हैं! फ़ाइल का डेटा संशोधित किया गया है और फ़ाइल की स्थिति भी बदली गई है, हालांकि फ़ाइल में वास्तव में नहीं बदला गया है।


तो इस से बचने के लिए, एक :w आदेश :map :w :up का उपयोग कर :up आदेश को मैप कर सकते हैं।

संबंधित मुद्दे