Cách tốt nhất để chèn dấu thời gian trong Vim?


90

EditPad Lite có một tính năng hay ( CTRL- E, CTRL- I) chèn một dấu thời gian, ví dụ: "2008-09-11 10:34:53" vào mã của bạn.

Cách tốt nhất để có được chức năng này trong Vim là gì?

(Tôi đang sử dụng Vim 6.1 trên máy chủ Linux thông qua SSH. Trong tình hình hiện tại, một số người trong chúng tôi chia sẻ thông tin đăng nhập nên tôi không muốn tạo các chữ viết tắt trong thư mục chính nếu có một cách tích hợp khác để lấy dấu thời gian. )

Câu trả lời:


87

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

Đã thử, nó hoạt động trên máy mac của tôi:

:r! date

sản xuất:

Thu Sep 11 10:47:30 CEST 2008

Điều này:

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

sản xuất:

2008-09-11 10:50:56

1
Chỉ cần một lưu ý nhỏ, dấu cách dường như không cần thiết - ": r! Date" cũng hoạt động.
Jon Bringhurst vào

@AB, đọc lướt qua câu hỏi này: stackoverflow.com/questions/15394572/… , có vẻ như bạn có thể thoát khỏi dấu gạch chéo ngược. Bạn có thể thử điều đó cho tôi?
Daren Thomas

3
Hoàn toàn hoạt động. Các cách khác để viết nó là :r!date "+\%F \%T"hoặc :r!date +\%F\ \%T.
chrisfargen

Đã định đưa cái này vào vimrc của tôi ... rồi nhận thấy tôi đã đặt nó ở đó từ lâu. Hoạt động tuyệt vời.
mgjk

Hoạt động giống như một sự quyến rũ trên chiếc mũ phớt của tôi 31. Cảm ơn bạn.
rchrd

114

Để làm cho nó hoạt động trên nhiều nền tảng, chỉ cần đưa những điều sau vào 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>

Bây giờ bạn chỉ cần nhấn F3 bất kỳ lúc nào bên trong Vi / Vim và bạn sẽ nhận được một dấu thời gian giống như 2016-01-25 Mo 12:44được chèn vào con trỏ.

Để có mô tả đầy đủ về các tham số có sẵn, hãy kiểm tra tài liệu của hàm C strftime () .


là có một phương pháp để làm hệ thống này rộng rãi (trong linux)?
nilon

Có phương pháp nào để tạo hoặc lưu tệp với dấu thời gian này làm tên tệp không?
nilon

Cảm ơn, vì F3 đã được sử dụng cho việc khác. Tôi định nghĩa một lệnh tùy chỉnh trong chế độ bình thường :Datebằng cách thêm những điều sau đây để tôi ~/.vimrctập tin cấu hình: command! Date put =strftime('%Y-%m-%d'). Nó chèn ngày trên một dòng mới. đã không quản lý để tạo một phiên bản không có dòng mới.
Paul Rougieux

13

Tại sao mọi người lại sử dụng :r!? Tìm một dòng trống và nhập !!datetừ chế độ lệnh. Tiết kiệm một lần gõ phím!

[nb Thao tác này sẽ chuyển dòng hiện tại thành stdin, và sau đó thay thế dòng bằng đầu ra lệnh; do đó phần "tìm một dòng trống".]


9

Như một phần mở rộng cho câu trả lời của @Swaroop CH,

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

là một biểu mẫu nhỏ gọn hơn cũng sẽ in múi giờ (thực tế là sự khác biệt so với UTC, ở biểu mẫu tuân thủ ISO-8601).

Nếu bạn muốn sử dụng một công cụ bên ngoài vì lý do nào đó,

:r !date --rfc-3339=s

sẽ cung cấp cho bạn một dấu thời gian tuân thủ RFC-3339 đầy đủ; sử dụng nsthay vì scho độ chính xác giống như Spock và tr ' ' Tchuyển sang sử dụng chữ T viết hoa thay vì khoảng cách giữa ngày và giờ.

Ngoài ra, bạn có thể thấy hữu ích khi biết rằng

:source somefile.vim

sẽ đọc trong các lệnh từ somefile.vim: bằng cách này, bạn có thể thiết lập một tập hợp các ánh xạ tùy chỉnh, v.v., rồi tải nó khi bạn đang sử dụng vim trên tài khoản đó.


strftime () là một hàm trong vim. Bạn cũng có thể sử dụng:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis

Trên máy tính của tôi (Windows 7, gvim 8.0.69), các chỉ số% F và% T không hoạt động, nhưng% Y-% m-% d và% H:% M:% S thì có. (Theo cplusplus.com/reference/ctime/strftime,% F và% T đi kèm với phiên bản strftime được cập nhật cho C99.) Ngoài ra, thông số% z tạo ra một mô tả dài về múi giờ.
Ed Wynn

8

: r! ngày

Sau đó, bạn có thể thêm định dạng vào lệnh date (man date) nếu bạn muốn có cùng một định dạng và thêm nó làm bí danh vim nữa

: r! ngày + "\% Y - \% m - \% d \% H: \% M: \% S"

Điều đó tạo ra định dạng bạn đã hiển thị trong ví dụ của mình (ngày trong trình bao không sử dụng \% mà chỉ sử dụng%, vim thay thế% bằng tên của tệp hiện tại, vì vậy bạn cần phải thoát khỏi nó).

Bạn có thể thêm một bản đồ trong .vimrc của mình để nó tự động đặt lệnh, chẳng hạn, mỗi khi bạn nhấn F3:

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

(Đã chỉnh sửa từ trên :)) (Chỉnh sửa: thay đổi phần văn bản thành mã, để

<F3> 

có thể được hiển thị)


4

Đối với dấu thời gian unix:

: r! ngày + \% s

Bạn cũng có thể ánh xạ lệnh này thành một khóa (ví dụ F12) trong VIM nếu bạn sử dụng nó nhiều:

Đặt cái này vào .vimrc của bạn:


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

4

Từ Vim Wikia .

Tôi sử dụng điều này thay vì phải di chuyển tay để nhấn phím F:

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

Bây giờ ở chế độ Chèn, nó chỉ cần nhập tds và ngay sau khi tôi nhấn phím cách hoặc quay trở lại, tôi sẽ nhận được ngày và tiếp tục nhập.

Tôi đặt %bvào đó, vì tôi thích nhìn thấy tên tháng. Cái %Fcho tôi một cái gì đó để sắp xếp theo ngày tháng. Tôi có thể thay đổi điều đó thành %Y%m%dđể không có ký tự nào giữa các đơn vị.



0

Một cách nhanh khác không có trong các câu trả lời trước: gõ-

!!ngày


0

Tôi muốn một lệnh tùy chỉnh :Date(không phải ánh xạ khóa) để chèn ngày ở vị trí con trỏ hiện tại.

Thật không may, các lệnh đơn giản như r!datedẫn đến một dòng mới. Vì vậy, cuối cùng tôi đã nghĩ ra những điều sau:

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

trong đó thêm chuỗi ngày / giờ tại vị trí con trỏ mà không thêm bất kỳ dòng mới nào (thay đổi để normal athêm vào sau vị trí con trỏ).


Trong khi điều này đang hoạt động, lệnh có vẻ quá phức tạp đối với tôi và tôi cảm thấy cần có một cách tốt hơn để thực hiện điều này. Nếu bạn biết ai, vui lòng cho tôi biết :)
luator
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.