Quero modificar arquivos vim
sem alterar os carimbos de data e hora da criação.
Os documentos não parecem mencionar nada sobre essa possibilidade.
Eu gostaria de conseguir isso sem desativar o recurso de troca / recuperação.
Uma alternativa seria armazenar o tempo em algum lugar e substituí-lo ao sair, eu acho.
Respostas:
A resposta de Sato estaria correta em uma derivada padrão do Unix, onde
ctime
muitas vezes é confundida com o tempo de criação, mas na verdade é o tempo de mudança do inode, e "preservar" isso realmente não faz sentido. No entanto, perguntei qual sistema operacional o pôster está usando porque o Mac OS X mantém um horário de criação separado, que é uma data e hora reais da criação, e não é atualizado modificando o arquivo no local ou alterando o modo do arquivo ou algo assim, tudo dos quais são atualizadosctime
.Você pode ver a hora da criação executando o Get Info em um arquivo no Finder ou
GetFileInfo <file>
em uma linha de comando (GetFileInfo
requer a instalação das ferramentas do desenvolvedor). O horário pode ser modificado usandoSetFile -d <datetime> <file>
(também exigindo ferramentas de desenvolvedor).Portanto, parece razoável (para mim, não sei sobre Bram :-)) pedir ao vim para manter o tempo de criação no Mac OS X, copiando o tempo de criação do arquivo original para o novo arquivo, mas claramente não e, olhando as fontes do vim, não vejo em nenhum lugar onde isso acontece. Infelizmente, parece que a resposta para a pergunta do pôster é "Atualmente não é possível". Como o Mac OS X (com ferramentas de desenvolvedor) permite obter e definir o tempo de criação na linha de comando, pode ser possível montar um script vim que faça isso, embora isso esteja atualmente atualmente além das minhas habilidades de script do vim.
Editar
Eu decidi brincar com algo de script e realmente o fiz funcionar!
Adicione o seguinte ao seu .vimrc:
Isso define comandos automáticos para serem executados antes de um arquivo ser lido (para edição em um buffer, não para coisas do tipo
:read
) e depois que ele é gravado. As primeiras chamadasSaveFileCreateTime
usadasGetFileInfo -d
para obter o tempo de criação do arquivo e armazená-lo na variável local do bufferb:created
. Depois que um arquivo é gravado,RestoreFileCreateTime
é chamado. Seb:created
existir, é usado em umsystem
comandoSetFile -d
para definir o horário.Aqui está um exemplo:
Você pode ver que o tempo de mudança do inode (como exibido por
stat
) mudou, mas o tempo de criação do arquivo (como exibido porGetFileInfo
) não. Sucesso!Como observado acima, isso requer que as ferramentas do desenvolvedor sejam instaladas para obter GetFileInfo e SetFile. Além disso, este é o meu primeiro script real, então fique à vontade para apontar todos os erros hediondos que cometi!
fonte
vim
o tempo de execução usando essas ferramentas, que eu instalei btw, para preservar a data de criação?vimdiff
arquivos pertencentes ao usuário e root. Por enquanto, tudo bem. Você deve postar isso no wiki Dicas do Vim . Essa foi uma ótima resposta, obrigado.stat
comando é para Linux, eu acho. No OS X 10.8.5 você usariastat -f %Sc
.Adicione
set backupcopy=yes
ao seu arquivo vimrc para preservar o tempo de criação do arquivo no macOS.Para mais informações, consulte
:help 'backupcopy'
.Fonte: Como posso o VIM manter a data de criação de um arquivo? (OS X)
fonte
O que você deseja não é possível implementar no UNIX usando funções padrão do espaço do usuário. O
ctime
arquivo de é atualizado automaticamente pelo kernel quando o arquivo éinode
alterado . Ao contrárioatime
emtime
, não há nenhuma função acessível ao utilizador de jogoctime
para um valor arbitrário.fonte
vim
, em vez de trocar arquivos, apenascp test.swp test.txt
?less test.swp
deve responder à sua pergunta.