回答:
佐藤の答えは標準のUnix派生物でctime
は正しいでしょう。この場合、作成時間と間違えられることが多いですが、実際にはiノードの変更時間であり、「保存」することは実際には意味がありません。ただし、Mac OS Xは実際の作成日時である個別の作成時間を維持し、ファイルを所定の場所で変更したり、ファイルのモードを変更したりして更新されないため、ポスターが使用しているOSを尋ねました。すべてそのうち更新しctime
ます。
作成時間は、Finderのファイルで情報を取得するかGetFileInfo <file>
、コマンドラインから確認できます(GetFileInfo
開発者ツールをインストールする必要があります)。時刻はSetFile -d <datetime> <file>
(開発ツールも必要)を使用して変更できます。
したがって、元のファイルから新しいファイルに作成時間をコピーすることにより、Mac OS Xで作成時間を維持するようにvimに要求することは合理的に思えます(私には、Bramについてはわかりません:-))。そうではなく、vimソースをちらっと見ただけで、どこにあるのかわかりません。そのため、残念ながら、投稿者の質問に対する回答は「現時点では不可能です」と思われます。Mac OS X(開発ツールを使用)では、コマンドラインから作成時間を取得および設定できるため、それを実行するvimスクリプトをまとめることができますが、それは(現在のところ)私のvimスクリプト機能を超えています。
編集する
私は何かをスクリプトで遊ぶことを決め、実際にそれを動作させました!
以下を.vimrcに追加してください:
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
これは、ファイルが読み取られる前(のようなものではなく、バッファー内で編集するため:read
)とファイルが書き込まれた後に実行するように自動コマンドを設定します。がファイルの作成時間を取得し、それをバッファのローカル変数に格納するためにSaveFileCreateTime
使用GetFileInfo -d
する最初の呼び出しb:created
。ファイルが書き込まれた後、RestoreFileCreateTime
が呼び出されます。b:created
存在する場合は、時刻の設定system
に使用するコマンドで使用SetFile -d
されます。
次に例を示します。
$ 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
iノードの変更時刻(で表示stat
)が変更されたのがわかりますが、ファイルの作成時刻(で表示)は変更されGetFileInfo
ていません。成功!
上記のように、GetFileInfoとSetFileを取得するには、開発ツールをインストールする必要があります。また、これは私の最初の実際のスクリプトなので、私が行ったすべての恐ろしいエラーを自由に指摘してください!
vim
は、作成日を保存するために、私がインストールしたツールを使用して、ラッパーまたはalter のランタイムになりますか?
vimdiff
rootとユーザーが所有するファイルをing しながらテストしました。ここまでは順調ですね。これはVim Tips wikiに投稿してください。それは素晴らしい答えでした、ありがとう。
stat
コマンドはLinux用です。OS X 10.8.5ではを使用しますstat -f %Sc
。
標準のユーザー空間関数を使用してUNIXに実装することはできません。ctime
ファイルのは、カーネルが自動的に更新されたファイルのinode
変更。atime
およびとは異なり、mtime
ユーザーがアクセスできるctime
任意の値に設定する関数はありません。
vim
、だけではなく、ファイルを交換しますかcp test.swp test.txt
?
less test.swp
あなたの質問に答えるべきです。