Cara terbaik untuk memasukkan cap waktu di Vim?


90

EditPad Lite memiliki fitur bagus ( CTRL- E, CTRL- I) yang memasukkan cap waktu misalnya "2008-09-11 10:34:53" ke dalam kode Anda.

Apa cara terbaik untuk mendapatkan fungsionalitas ini di Vim?

(Saya menggunakan Vim 6.1 di server Linux melalui SSH. Dalam situasi saat ini, beberapa dari kami berbagi login jadi saya tidak ingin membuat singkatan di direktori home jika ada cara lain untuk mendapatkan stempel waktu. )

Jawaban:


87

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

Sudah mencobanya, ini berfungsi di mac saya:

:r! date

menghasilkan:

Thu Sep 11 10:47:30 CEST 2008

Ini:

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

menghasilkan:

2008-09-11 10:50:56

1
Hanya catatan kecil, spasi tampaknya tidak diperlukan - ": r! Date" juga berfungsi.
Jon Bringhurst

@AB, membaca sekilas pertanyaan ini: stackoverflow.com/questions/15394572/… , tampaknya Anda dapat melarikan diri dengan garis miring terbalik. Bisakah kamu mencobanya untukku?
Daren Thomas

3
Benar-benar bekerja. Cara lain untuk menulisnya adalah :r!date "+\%F \%T"atau :r!date +\%F\ \%T.
chrisfargen

Pergi untuk meletakkan ini di vimrc saya ... kemudian perhatikan saya sudah meletakkannya di sana berabad-abad yang lalu. Bekerja dengan baik.
mgjk

Bekerja seperti pesona di fedora 31 saya. Terima kasih.
rchrd

115

Untuk membuatnya berfungsi lintas platform, cukup letakkan yang berikut di Anda 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>

Sekarang Anda bisa menekan F3 kapan saja di dalam Vi / Vim dan Anda akan mendapatkan stempel waktu seperti yang 2016-01-25 Mo 12:44disisipkan di kursor.

Untuk penjelasan lengkap tentang parameter yang tersedia, periksa dokumentasi fungsi C strftime () .


apakah ada metode untuk melakukan sistem ini secara luas (di linux)?
nilon

Apakah ada metode untuk membuat atau menyimpan file dengan stempel waktu ini sebagai nama file?
nilon

Terima kasih, karena F3 sudah digunakan untuk hal lain. Saya mendefinisikan perintah kustom dalam mode normal :Datedengan menambahkan berikut untuk saya ~/.vimrcfile konfigurasi: command! Date put =strftime('%Y-%m-%d'). Ini memasukkan tanggal di baris baru. tidak berhasil membuat versi tanpa baris baru.
Paul Rougieux

1
@PaulRougieux Berikut ini adalah untuk memasukkan tanggal tanpa baris baru:command! Date :normal a<C-R>=strftime('%Y-%m-%d')<CR>
UnderBlue592

13

Mengapa semua orang menggunakan :r!? Temukan baris kosong dan ketik !!datedari mode perintah. Simpan satu tombol!

[nb Ini akan menyalurkan baris saat ini ke stdin, dan kemudian mengganti baris dengan output perintah; karenanya bagian "temukan garis kosong".]


9

Sebagai perpanjangan dari jawaban @Swaroop CH,

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

adalah bentuk yang lebih ringkas yang juga akan mencetak zona waktu (sebenarnya perbedaannya dari UTC, dalam bentuk yang sesuai dengan ISO-8601).

Jika Anda lebih suka menggunakan alat eksternal karena alasan tertentu,

:r !date --rfc-3339=s

akan memberi Anda stempel waktu yang sesuai dengan RFC-3339; gunakan nssebagai ganti suntuk presisi seperti Spock, dan tr ' ' Tgunakan pipa untuk menggunakan huruf besar T, bukan spasi antara tanggal dan waktu.

Anda juga mungkin merasa berguna untuk mengetahui hal itu

:source somefile.vim

akan membaca dalam perintah dari somefile.vim: dengan cara ini Anda dapat mengatur satu set pemetaan kustom, dll., dan kemudian memuatnya saat Anda menggunakan vim di akun itu.


strftime () adalah fungsi dalam vim. Anda juga dapat menggunakan:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis

Di mesin saya (Windows 7, gvim 8.0.69), penentu% F dan% T tidak berfungsi, tetapi% Y-% m-% d dan% H:% M:% S berhasil. (Menurut cplusplus.com/reference/ctime/strftime,% F dan% T hadir dengan versi terbaru dari strftime untuk C99.) Selain itu, penentu% z menghasilkan deskripsi zona waktu yang bertele-tele.
Ed Wynn

8

: r! tanggal

Anda kemudian dapat menambahkan format ke perintah tanggal (tanggal manual) jika Anda menginginkan format yang sama persis dan menambahkan ini sebagai alias vim juga

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

Itu menghasilkan format yang Anda tunjukkan dalam contoh Anda (tanggal di shell tidak menggunakan \%, tetapi hanya%, vim menggantikan% dengan nama file saat ini, jadi Anda perlu menghindarinya).

Anda dapat menambahkan peta di .vimrc Anda agar dapat meletakkan perintah secara otomatis, misalnya, setiap kali Anda menekan F3:

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

(Diedit dari atas :)) (Edit: ubah bagian teks menjadi kode, sehingga

<F3> 

dapat ditampilkan)


4

Untuk stempel waktu unix:

: r! tanggal + \% s

Anda juga dapat memetakan perintah ini ke sebuah kunci (misalnya F12) di VIM jika Anda sering menggunakannya:

Taruh ini di .vimrc Anda:


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

4

Dari Vim Wikia .

Saya menggunakan ini daripada harus menggerakkan tangan saya untuk menekan tombol F:

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

Sekarang dalam mode Sisipkan cukup ketik tds dan segera setelah saya menekan spasi atau kembali, saya mendapatkan tanggal dan terus mengetik.

Saya taruh %bdi sana, karena saya suka melihat nama bulan. The %Fmemberi saya sesuatu untuk mengurutkan berdasarkan tanggal. Saya mungkin mengubahnya %Y%m%djadi tidak ada karakter di antara unit.



0

Cara cepat lain yang tidak termasuk dalam jawaban sebelumnya: ketik-

!!tanggal


0

Saya ingin perintah khusus :Date(bukan pemetaan kunci) untuk memasukkan tanggal pada posisi kursor saat ini.

Sayangnya perintah langsung seperti r!datemenghasilkan baris baru. Jadi akhirnya saya menemukan yang berikut:

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

yang menambahkan string tanggal / waktu pada posisi kursor tanpa menambahkan baris baru (ubah untuk normal amenambahkan setelah posisi kursor).


Sementara ini berfungsi, perintah tersebut terlihat terlalu rumit bagi saya dan saya merasa harus ada cara yang lebih baik untuk melakukan ini. Jika Anda tahu satu, beri tahu saya :)
luator
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.