วิธีที่ดีที่สุดในการแทรกเวลาในกลุ่ม?


90

EditPad Lite มีคุณสมบัติที่ดี ( CTRL- E, CTRL- I) ซึ่งแทรกการประทับเวลาเช่น "2008-09-11 10:34:53" ลงในรหัสของคุณ

วิธีที่ดีที่สุดในการรับฟังก์ชันนี้ใน Vim คืออะไร?

(ฉันใช้ Vim 6.1 บนเซิร์ฟเวอร์ Linux ผ่าน SSH ในสถานการณ์ปัจจุบันพวกเราหลายคนแชร์ล็อกอินดังนั้นฉันจึงไม่ต้องการสร้างตัวย่อในโฮมไดเร็กทอรีหากมีวิธีอื่นในการรับการประทับเวลา )

คำตอบ:


87

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

ลองใช้งานได้บน Mac ของฉัน:

: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
เพียงบันทึกเล็กน้อยดูเหมือนว่าช่องว่างจะไม่จำเป็น - ": r! date" ก็ใช้ได้เช่นกัน
Jon Bringhurst

@AB อ่านคำถามนี้: stackoverflow.com/questions/15394572/…ดูเหมือนว่าคุณจะหนีได้ด้วยแบ็กสแลช ลองให้ฉันดูหน่อยได้ไหม
Daren Thomas

3
ใช้งานได้ทั้งหมด วิธีอื่นในการเขียนคือ:r!date "+\%F \%T"หรือ:r!date +\%F\ \%T.
chrisfargen

ไปใส่สิ่งนี้ไว้ใน vimrc ของฉัน ... แล้วสังเกตว่าฉันใส่มันไว้ที่นั่นเมื่อนานมาแล้ว ใช้งานได้ดี
mgjk

ใช้งานได้เหมือนมีเสน่ห์บน fedora 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 ได้ตลอดเวลาภายใน Vi / Vim และคุณจะได้รับการประทับเวลาเช่น2016-01-25 Mo 12:44แทรกที่เคอร์เซอร์

สำหรับคำอธิบายที่สมบูรณ์ของพารามิเตอร์ที่มีอยู่ตรวจสอบเอกสารของ strftime ฟังก์ชัน C ()


มีวิธีทำให้ระบบนี้กว้าง (ใน linux) หรือไม่?
nilon

มีวิธีการสร้างหรือบันทึกไฟล์ด้วยการประทับเวลานี้เป็นชื่อไฟล์หรือไม่?
nilon

ขอบคุณเนื่องจาก F3 ถูกใช้เพื่ออย่างอื่นแล้ว ฉันกำหนดคำสั่งที่กำหนดเองในโหมดปกติ:Dateโดยเพิ่มสิ่งต่อไปนี้ใน~/.vimrcไฟล์คอนฟิกูเรชันของฉัน: command! Date put =strftime('%Y-%m-%d'). มันแทรกวันที่ในบรรทัดใหม่ ไม่ได้จัดการสร้างเวอร์ชันโดยไม่ขึ้นบรรทัดใหม่
Paul Rougieux

1
@PaulRougieux ต่อไปนี้ใช้สำหรับใส่วันที่โดยไม่ขึ้นบรรทัดใหม่:command! Date :normal a<C-R>=strftime('%Y-%m-%d')<CR>
UnderBlue592

13

ทำไมทุกคนถึงใช้:r!? ค้นหาบรรทัดว่างและพิมพ์!!dateจากโหมดคำสั่ง บันทึกการกดแป้นพิมพ์!

[nb สิ่งนี้จะไปป์ไลน์ปัจจุบันเข้าสู่ stdin จากนั้นแทนที่บรรทัดด้วยเอาต์พุตคำสั่ง ดังนั้นส่วน "ค้นหาบรรทัดว่าง"]


9

เป็นส่วนเสริมของคำตอบของ @Swaroop CH

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

เป็นรูปแบบที่กะทัดรัดกว่าซึ่งจะพิมพ์เขตเวลาด้วย (จริงๆแล้วคือความแตกต่างจาก UTC ในรูปแบบที่สอดคล้องกับ ISO-8601)

หากคุณต้องการใช้เครื่องมือภายนอกด้วยเหตุผลบางประการ

:r !date --rfc-3339=s

จะให้การประทับเวลาที่สอดคล้องกับ RFC-3339 แบบเต็ม ใช้nsแทนsความแม่นยำเหมือน Spock และต่อท่อtr ' ' Tเพื่อใช้ตัวพิมพ์ใหญ่ T แทนช่องว่างระหว่างวันที่และเวลา

นอกจากนี้คุณอาจพบว่ามีประโยชน์ที่จะรู้ว่า

:source somefile.vim

จะอ่านคำสั่งจากsomefile.vim: ด้วยวิธีนี้คุณสามารถตั้งค่าชุดการแมปที่กำหนดเอง ฯลฯ จากนั้นโหลดเมื่อคุณใช้กลุ่มในบัญชีนั้น


strftime () เป็นฟังก์ชันภายในกลุ่ม คุณยังสามารถใช้:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis

บนเครื่องของฉัน (Windows 7, gvim 8.0.69) ตัวระบุ% F และ% T ไม่ทำงาน แต่% Y-% m-% d และ% H:% M:% S ทำได้ (อ้างอิงจากcplusplus.com/reference/ctime/strftime% F และ% T มาพร้อมกับ strftime เวอร์ชันอัปเดตสำหรับ C99) นอกจากนี้ตัวระบุ% z ยังให้คำอธิบายเขตเวลาที่ชัดเจน
Ed Wynn

8

: ร! วันที่

จากนั้นคุณสามารถเพิ่มรูปแบบให้กับคำสั่ง date (man date) หากคุณต้องการรูปแบบเดียวกันและเพิ่มสิ่งนี้เป็นนามแฝงเป็นกลุ่มด้วย

: ร! วันที่ + "\% Y - \% m - \% d \% H: \% M: \% S"

ซึ่งสร้างรูปแบบที่คุณแสดงในตัวอย่างของคุณ (วันที่ในเชลล์ไม่ได้ใช้ \% แต่เพียงแค่% กลุ่มจะแทนที่% ด้วยชื่อไฟล์ปัจจุบันดังนั้นคุณต้องหลีกเลี่ยงมัน)

คุณสามารถเพิ่มแผนที่ใน. vimrc ของคุณเพื่อวางคำสั่งโดยอัตโนมัติเช่นทุกครั้งที่คุณกด F3:

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

(แก้ไขจากด้านบน :)) (แก้ไข: เปลี่ยนส่วนข้อความเป็นโค้ดดังนั้น

<F3> 

สามารถแสดงได้)


4

สำหรับการประทับเวลา Unix:

: ร! วันที่ + \% s

คุณยังสามารถแมปคำสั่งนี้กับคีย์ (เช่น F12) ใน VIM ได้หากคุณใช้มันมาก

ใส่สิ่งนี้ใน. vimrc ของคุณ:


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

4

จากกลุ่ม Wikia

ฉันใช้สิ่งนี้แทนการขยับมือเพื่อกดปุ่ม F:

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

ตอนนี้ในโหมดแทรกให้พิมพ์ tds และทันทีที่ฉันกด Space bar หรือย้อนกลับฉันจะได้รับวันที่และพิมพ์ต่อไป

ฉันใส่ไว้%bในนั้นเพราะฉันชอบดูชื่อเดือน %Fให้ฉันบางสิ่งบางอย่างที่จะเรียงลำดับตามวันที่ ฉันอาจเปลี่ยนเป็น%Y%m%dเพื่อให้ไม่มีอักขระระหว่างหน่วย




0

ฉันต้องการคำสั่งที่กำหนดเอง:Date(ไม่ใช่การแมปคีย์) เพื่อแทรกวันที่ที่ตำแหน่งเคอร์เซอร์ปัจจุบัน

น่าเสียดายที่คำสั่งตรงไปตรงมาเช่นr!dateผลลัพธ์ในบรรทัดใหม่ ในที่สุดฉันก็ได้สิ่งต่อไปนี้:

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

ซึ่งจะเพิ่มสตริงวันที่ / เวลาที่ตำแหน่งเคอร์เซอร์โดยไม่ต้องเพิ่มบรรทัดใหม่ (เปลี่ยนเพื่อnormal aเพิ่มหลังตำแหน่งเคอร์เซอร์)


ในขณะที่ใช้งานได้คำสั่งดูซับซ้อนเกินไปสำหรับฉันและฉันรู้สึกว่าควรมีวิธีที่ดีกว่าในการทำเช่นนี้ ถ้าคุณรู้จักโปรดแจ้งให้เราทราบ :)
luator
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.