Para arquivos em uma pasta específica, eu gostaria que o vim nunca tocasse no carimbo de data / hora "modificado".
O pano de fundo é que eu uso o Bloxsom para blogs, que usa arquivos de texto sem formatação ~/bloxsom
como fonte de todos os artigos. A data do artigo (e, portanto, a ordem de exibição) é baseada na data de modificação do arquivo de texto. Não quero que o artigo apareça como se fosse novo sempre que eu corrigir um erro de digitação. (Eu faço muitos
deles ...: D)
Até agora, o vim altera o carimbo de data e hora e o carimbo original é perdido para sempre. Tudo bem e quero mantê-lo assim para a maioria dos arquivos no sistema. Mas não quero isso para os arquivos do blog - posso sempre touch
o arquivo, se precisar.
Alguma idéia de como ajustar o vim nesse comportamento?
fonte
Respostas:
Eu não acho que o vim tenha esse recurso. Uma alternativa é modificar uma cópia e definir o carimbo de data / hora adequadamente, por exemplo:
Ou melhor ainda:
fonte
Se você precisa se divertir:
Substitua caminho pelo caminho real do arquivo
fonte
Eu escrevi um script Perl para isso.
É um invólucro em torno do vim, salvo
~/bin/vim-nomtime.pl
e usadoalias vim='~/bin/vim-nomtime.pl'
em meu .bashrc.Algumas boas características:
suporta vários nomes de arquivos
suporta múltiplos dirs "assistidos"
suporta dir link simbólico
pode ser aprimorado com outros critérios
a maioria dos quais provavelmente também poderia ser alcançada com a versão pura do vim. As desvantagens desta solução em comparação à minha solução de vim puro desejada são:
restaura o carimbo somente depois que o vim é encerrado; portanto, se eu fizer uma edição longa e salvar regularmente, o arquivo será exibido como novo até que eu saia do vim
ele suporta vários arquivos na linha de comando, mas de uma maneira bastante ingênua - apenas verifica se o item
@ARGV
está em um arquivo. Provavelmente isso não funcionaria com caracteres curinga (por exemplovim note-*.txt
) ou outras coisas engraçadasnão é à prova de falhas, provavelmente nem mesmo à prova de HUP (isso pode ser feito)
... bem, é um invólucro. (Quero dizer, se resolvermos tudo por meio do invólucro, quantos invólucros teríamos antes que algo ruim acontecesse?)
fonte
Este script curto preservará o horário modificado se qualquer diretório pai do arquivo contiver um
.nomtime
arquivo:fonte
Tente esta
bash
função (com base na resposta de Shâu Shắc )Agora podemos editar o arquivo e preservar o tempo modificado usando este
fonte
vi
apenas um único arquivo por vez; não vai funcionarvi file1 file2
. (3) Escusado será dizer que, se o usuário mudar para um arquivo diferente:e
, ele não será tratado.Há uma opção para copiar um registro de data e hora de outro arquivo.
Exemplo:
fonte
Encontrei uma ótima solução nesta página da web , que cria uma função vim para salvar o arquivo atual, preservando o tempo de modificação existente, e vincula essa função à F4tecla de função:
No entanto, descobri que a função original contém um bug menor, acionando o seguinte aviso se F4for usado duas vezes no mesmo arquivo, porque o vim fica confuso quando o tempo de modificação é alterado:
Felizmente, isso é fácil de corrigir: adicionei um comando "edit" à função original para recarregar o arquivo depois de restaurar o carimbo de data / hora, para que o vim saiba que hora de modificação você espera que o arquivo tenha.
Aqui está a função vim modificada com esta correção de bug, que pode ser adicionada a
~/.vimrc
:Nota: Esta função depende das versões GNU de
date
,stat
etouch
.fonte
Usando alguns dos conceitos descritos acima, aqui está um alias de uma linha muito rápido e sujo para CSH, que disponibiliza um comando "edit" para este fim:
Você pode facilmente usar a variável de ambiente $ VISUAL ou $ EDITOR no lugar de "vim". Dessa forma, você pode emitir o seguinte comando para alterar os editores padrão
Agora, o próprio alias não precisa ser redefinido para acomodar diferentes editores, tornando-o um pouco mais portátil. Se você usar um shell que não seja CSH ou TCSH, é claro, os exemplos acima podem ser adaptados de acordo.
fonte