Jawaban Sato akan benar pada turunan standar Unix, di mana ctime
sering keliru untuk waktu pembuatan tetapi sebenarnya waktu perubahan inode, dan "melestarikan" itu tidak benar-benar masuk akal. Namun, saya bertanya apa OS poster digunakan karena Mac OS X mempertahankan waktu buat yang terpisah yang merupakan tanggal dan waktu pembuatan aktual, dan tidak diperbarui dengan memodifikasi file di tempat atau mengubah mode file atau hal-hal seperti itu, semua dari yang melakukan pembaruan ctime
.
Anda dapat melihat waktu pembuatan dengan melakukan Dapatkan Info pada file di Finder atau GetFileInfo <file>
dari baris perintah ( GetFileInfo
membutuhkan alat pengembang untuk diinstal). Waktu dapat dimodifikasi menggunakan SetFile -d <datetime> <file>
(juga membutuhkan alat pengembang).
Jadi sepertinya masuk akal (bagi saya, tidak tahu tentang Bram :-)) untuk meminta vim mempertahankan waktu pembuatan di Mac OS X, dengan menyalin waktu pembuatan dari file asli ke file baru, tetapi jelas tidak dan melirik melalui sumber vim, saya tidak melihat di mana pun ia melakukannya. Jadi, sayangnya, tampaknya jawaban untuk pertanyaan poster adalah "Saat ini tidak mungkin." Karena Mac OS X (dengan alat pengembang) memang memungkinkan untuk mendapatkan dan mengatur waktu pembuatan dari baris perintah, dimungkinkan untuk menyatukan skrip vim yang melakukan itu, meskipun itu (saat ini) berada di luar kemampuan skrip vim saya.
Edit
Saya memutuskan untuk bermain-main dengan menulis sesuatu dan benar-benar membuatnya bekerja!
Tambahkan berikut ini ke .vimrc Anda:
autocmd BufReadPre * call SaveFileCreateTime()
autocmd BufWritePost * call RestoreFileCreateTime()
function! SaveFileCreateTime()
let l:path = expand('%:p')
if l:path != ''
let b:created = system("GetFileInfo -d " . shellescape(bufname("%")))
endif
endfunction
function! RestoreFileCreateTime()
if exists('b:created')
execute system(
\ 'SetFile -d ' .
\ shellescape(b:created) .
\ ' ' .
\ shellescape(bufname("%")))
endif
endfunction
Itu menetapkan perintah otomatis untuk dijalankan sebelum file dibaca (untuk mengedit dalam buffer, bukan untuk hal-hal seperti :read
) dan setelah itu ditulis. Panggilan pertama SaveFileCreateTime
yang digunakan GetFileInfo -d
untuk mendapatkan waktu pembuatan file dan menyimpannya dalam variabel lokal buffer b:created
. Setelah file ditulis, RestoreFileCreateTime
dipanggil. Jika b:created
ada, itu digunakan dalam system
perintah yang digunakan SetFile -d
untuk mengatur waktu.
Ini sebuah contoh:
$ echo hello >file.txt
$ stat -c%z file.txt;GetFileInfo -d file.txt
2015-11-07 11:44:04.000000000 -0800
11/07/2015 11:44:04
$ vim file.txt
a earth<esc>:wq
$ cat file.txt
hello earth
$ stat -c%z file.txt;GetFileInfo -d file.txt
2015-11-07 11:44:24.000000000 -0800
11/07/2015 11:44:04
Anda dapat melihat waktu perubahan inode (seperti yang ditampilkan oleh stat
) telah berubah, tetapi file tersebut membuat waktu (seperti yang ditampilkan oleh GetFileInfo
) belum. Keberhasilan!
Seperti disebutkan di atas, ini membutuhkan alat pengembang untuk diinstal untuk mendapatkan GetFileInfo dan SetFile. Juga, ini adalah naskah asli saya yang pertama, jadi silakan tunjukkan semua kesalahan mengerikan yang saya buat!