विम में टाइमस्टैम्प डालने का सबसे अच्छा तरीका?


90

एडिटपैड लाइट में एक अच्छी सुविधा ( CTRL- E, CTRL- I) है जो आपके कोड में एक टाइम स्टैम्प जैसे "2008-09-11 10:34:53" को सम्मिलित करती है।

विम में इस कार्यक्षमता को प्राप्त करने का सबसे अच्छा तरीका क्या है?

(मैं SSH के माध्यम से लिनक्स सर्वर पर Vim 6.1 का उपयोग कर रहा हूं। वर्तमान स्थिति में हममें से कई लोग लॉगिन साझा करते हैं इसलिए मैं होम डायरेक्टरी में संक्षिप्तीकरण नहीं करना चाहता हूं यदि टाइमस्टैम्प प्राप्त करने का एक और अंतर्निहित तरीका है। )

जवाबों:


87

http://kenno.wordpress.com/2006/08/03/vim-tip-insert-time-stamp/

कोशिश की, यह मेरे मैक पर काम करता है:

:r! date

पैदा करता है:

Thu Sep 11 10:47:30 CEST 2008

यह:

:r! date "+\%Y-\%m-\%d \%H:\%M:\%S"

पैदा करता है:

2008-09-11 10:50:56

1
बस एक मामूली नोट, अंतरिक्ष के लिए आवश्यक नहीं लगता है - ": आर! तिथि" भी काम करता है।
जॉन फाइवहर्स्ट

@AB, इस प्रश्न के माध्यम से स्किमिंग: stackoverflow.com/questions/15394572/… , ऐसा लगता है कि आप बैकस्लैश के साथ बच सकते हैं। क्या आप मेरे लिए कोशिश कर सकते हैं?
डैरन थॉमस

3
पूरी तरह से काम करता है। इसे लिखने के अन्य तरीके हैं :r!date "+\%F \%T"या :r!date +\%F\ \%T
क्रिस्पार्गेन

यह मेरे vimrc में डालने के लिए चला गया ... तो मैंने देखा कि मैं इसे पहले ही उम्र में डाल चुका हूं। बहुत अच्छा काम करता है।
mgjk

मेरे फेडोरा 31 पर एक आकर्षण की तरह काम करता है। धन्यवाद।
rchrd

115

इसे क्रॉस-प्लेटफ़ॉर्म पर काम करने के लिए, बस निम्नलिखित को अपने में रखें vimrc:

nmap <F3> i<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc>
imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR>

अब आप वी / वीम के अंदर किसी भी समय F3 दबा सकते हैं और आपको 2016-01-25 Mo 12:44कर्सर पर एक टाइमस्टैम्प डाला जाएगा।

उपलब्ध मापदंडों के पूर्ण विवरण के लिए C फ़ंक्शन स्ट्रैफ़टाइम () का दस्तावेज़ीकरण देखें


क्या इस प्रणाली को विस्तृत करने के लिए एक विधि है (लिनक्स में)?
नील

क्या फ़ाइल टाइम के रूप में इस टाइमस्टैम्प के साथ फाइल बनाने या सहेजने की कोई विधि है?
नील

धन्यवाद, चूंकि F3 पहले से ही कुछ और के लिए उपयोग किया जाता है। मैंने :Dateअपनी ~/.vimrcकॉन्फ़िगरेशन फ़ाइल में निम्न जोड़कर सामान्य मोड में एक कस्टम कमांड को परिभाषित किया command! Date put =strftime('%Y-%m-%d'):। यह एक नई पंक्ति में दिनांक सम्मिलित करता है। न्यूलाइन के बिना एक संस्करण बनाने का प्रबंधन नहीं किया।
पॉल रूगीक्स

1
@PaRRougieux नई लाइन के बिना तारीख डालने के लिए निम्नलिखित है:command! Date :normal a<C-R>=strftime('%Y-%m-%d')<CR>
अंडरबेल 592

13

हर कोई उपयोग क्यों कर रहा है :r!? एक रिक्त रेखा ढूंढें और !!dateकमांड-मोड से टाइप करें। एक कीस्ट्रोक बचाओ!

[नायब यह वर्तमान लाइन को स्टड में पाइप करेगा, और फिर कमांड आउटपुट के साथ लाइन को प्रतिस्थापित करेगा; इसलिए "एक रिक्त रेखा ढूंढें" भाग।]


9

@Swaroop CH के उत्तर के विस्तार के रूप में,

^R=strftime("%FT%T%z")

एक अधिक कॉम्पैक्ट रूप है जो समय क्षेत्र (वास्तव में यूटीसी से अंतर, आईएसओ -8601-अनुरूप रूप में) को भी प्रिंट करेगा।

यदि आप किसी कारण से बाहरी उपकरण का उपयोग करना पसंद करते हैं,

:r !date --rfc-3339=s

आपको एक पूर्ण RFC-3339 आज्ञाकारी टाइमस्टैम्प देगा; का उपयोग nsकरने के बजाय sके लिए स्पॉक की तरह सटीक, और के माध्यम से पाइप tr ' ' Tकी तारीख और समय के बीच एक रिक्ति के बजाय एक पूंजी टी का उपयोग करें।

इसके अलावा, आपको यह जानना उपयोगी हो सकता है

:source somefile.vim

से कमांड में पढ़ा जाएगा somefile.vim: इस तरह आप मैपिंग आदि का एक कस्टम सेट सेट कर सकते हैं, और फिर उस पर लोड कर सकते हैं जब आप उस खाते पर विम का उपयोग कर रहे हैं।


strftime () vim के भीतर एक फंक्शन है। आप इसका उपयोग भी कर सकते हैं:put=strftime(""%FT%T%z")
एंटोनियोस हेजिजोर्गालिस

मेरी मशीन पर (विंडोज 7, जीविम 8.0.69),% F और% T स्पेसर ने काम नहीं किया, लेकिन% Y-% m-% d और% H:% M:% S ने किया। ( Cplusplus.com/reference/ctime/strftime के अनुसार ,% F और% T, C99 के लिए स्ट्रिपटाइम के अपडेटेड वर्जन के साथ आए हैं।) इसके अलावा,% z स्पेसियर ने टाइमज़ोन का एक शानदार विवरण तैयार किया।
एड वेन

8

: आर! दिनांक

फिर आप तिथि कमांड (मैन डेट) में प्रारूप जोड़ सकते हैं यदि आप ठीक उसी प्रारूप चाहते हैं और इसे एक विम एलिट के रूप में भी जोड़ सकते हैं

: आर! दिनांक + "\% Y - \% m - \% d \% H: \% M: \% S"

यह आपके उदाहरण में दिखाए गए प्रारूप का उत्पादन करता है (शेल में दिनांक \% का उपयोग नहीं करता है, लेकिन सिर्फ%, विम वर्तमान फ़ाइल के नाम से% को प्रतिस्थापित करता है, इसलिए आपको इसे बचने की आवश्यकता है)।

उदाहरण के लिए, जब भी आप F3 दबाते हैं, तो आप इसके लिए अपने .vimrc में एक नक्शा जोड़ सकते हैं।

:map <F3> :r! date +"\%Y-\%m-\%d \%H:\%M:\%S"<cr>

(उपरोक्त :) से संपादित) (संपादित करें: पाठ भाग को कोड में बदलें, ताकि

<F3> 

प्रदर्शित किया जा सकता है)


4

एक यूनिक्स टाइमस्टैम्प के लिए:

: आर! दिनांक +% s

यदि आप इसका भरपूर उपयोग करते हैं, तो आप इस कमांड को VIM में कुंजी (उदाहरण F12) के लिए मैप कर सकते हैं:

इसे अपने .vimrc में रखें:


map  <F12> :r! date +\%s<cr>

4

से विम विकिया

मैं एक एफ कुंजी हिट करने के लिए अपना हाथ हिलाने के बजाय इसका उपयोग करता हूं:

:iab <expr> tds strftime("%F %b %T")

अब इन्सर्ट मोड में यह केवल tds टाइप करें और जैसे ही मैंने स्पेस बार को हिट किया या वापस लौटा, मुझे तारीख मिलती है और टाइप करते रहते हैं।

मैंने %bवहां डाल दिया , क्योंकि मुझे महीने का नाम देखना पसंद है। %Fमुझे दिनांक के आधार पर सुलझाने के लिए कुछ देता है। मैं इसे बदल सकता हूं %Y%m%dताकि इकाइयों के बीच कोई चरित्र न हो।



0

एक और त्वरित तरीका पिछले उत्तरों द्वारा शामिल नहीं है: टाइप-

!!दिनांक


0

मैं :Dateवर्तमान कर्सर स्थिति पर दिनांक सम्मिलित करने के लिए एक कस्टम कमांड (कुंजी मैपिंग नहीं) चाहता था ।

दुर्भाग्य से सीधी आज्ञाएँ r!dateएक नई पंक्ति में परिणित होती हैं। तो अंत में मैं निम्नलिखित के साथ आया:

command Date execute "normal i<C-R>=strftime('%F %T')<CR><ESC>"

जो किसी भी नई लाइन ( normal aकर्सर की स्थिति के बाद जोड़ने के लिए परिवर्तन) को जोड़े बिना कर्सर स्थिति में दिनांक / समय स्ट्रिंग जोड़ता है ।


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