Saya ingin memodifikasi file dengan vim
tanpa mengubah prangko waktu pembuatan.
Dokumen itu sepertinya tidak menyebutkan apa pun tentang kemungkinan seperti itu.
Saya ingin mencapai ini tanpa mematikan fitur swap / recover.
Salah satu alternatif adalah menyimpan waktu di suatu tempat dan kemudian menimpanya saat keluar, saya kira.
Jawaban:
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 pembaruanctime
.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 menggunakanSetFile -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:
Itu menetapkan perintah otomatis untuk dijalankan sebelum file dibaca (untuk mengedit dalam buffer, bukan untuk hal-hal seperti
:read
) dan setelah itu ditulis. Panggilan pertamaSaveFileCreateTime
yang digunakanGetFileInfo -d
untuk mendapatkan waktu pembuatan file dan menyimpannya dalam variabel lokal bufferb:created
. Setelah file ditulis,RestoreFileCreateTime
dipanggil. Jikab:created
ada, itu digunakan dalamsystem
perintah yang digunakanSetFile -d
untuk mengatur waktu.Ini sebuah contoh:
Anda dapat melihat waktu perubahan inode (seperti yang ditampilkan oleh
stat
) telah berubah, tetapi file tersebut membuat waktu (seperti yang ditampilkan olehGetFileInfo
) 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!
sumber
vim
runtime alter menggunakan alat-alat itu, yang telah saya instal btw, untuk mempertahankan tanggal pembuatan?vimdiff
file yang dimiliki oleh root dan pengguna. Sejauh ini bagus. Anda harus memposting ini di wiki Tips Vim . Itu jawaban yang bagus, terima kasih.stat
perintahmu untuk Linux, kurasa. Di OS X 10.8.5 Anda akan menggunakanstat -f %Sc
.Tambahkan
set backupcopy=yes
ke file vimrc Anda untuk menghemat waktu pembuatan file di macOS.Untuk info lebih lanjut, lihat
:help 'backupcopy'
.Sumber: Bagaimana saya bisa mendapatkan VIM untuk mempertahankan tanggal pembuatan file? (OS X)
sumber
Apa yang Anda inginkan tidak mungkin diterapkan di UNIX menggunakan fungsi userspace standar. The
ctime
file diperbarui secara otomatis oleh kernel ketika fileinode
perubahan . Tidak sepertiatime
danmtime
, tidak ada fungsi yang dapat diakses pengguna untuk menetapkanctime
nilai sewenang-wenang.sumber
vim
, alih-alih bertukar file, kancp test.swp test.txt
?less test.swp
harus menjawab pertanyaan Anda.