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. )

Edward Tanguay
sumber

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
Daren Thomas
sumber
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 () .

Swaroop CH
sumber
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".]

luser droog
sumber
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.

intuitif
sumber
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)

Vinko Vrsalovic
sumber
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>
fijter
sumber
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.

pengguna3449771
sumber
2

Unix, gunakan:

!!date

Windows, gunakan:

!!date /t

Detail selengkapnya: lihat Insert_current_date_or_time

byte-bajak laut
sumber
0

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

!!tanggal

lukmac
sumber
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).

luator.dll
sumber
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