Pour les fichiers d'un dossier spécifique, je voudrais que vim ne touche jamais du tout à l'horodatage "modifié".
L'arrière-plan est que j'utilise Bloxsom pour les blogs, qui utilise des fichiers en texte brut ~/bloxsom
comme source de tous les articles. La date de l'article (et donc l'ordre d'apparition) est basée sur la date de modification du fichier texte. Je ne veux pas qu'un article s'affiche comme s'il était nouveau chaque fois que je corrige une faute de frappe. (J'en fais beaucoup
...: D)
Jusqu'à présent, vim change l'horodatage et le tampon d'origine est perdu pour toujours. C'est OK et je veux que cela reste ainsi pour la plupart des fichiers du système. Mais je ne veux pas cela pour les fichiers de blog - je peux toujours touch
le fichier si j'ai besoin.
Des idées sur la façon de modifier vim dans ce comportement?
la source
Réponses:
Je ne pense pas que vim possède cette fonctionnalité. Une alternative consiste à modifier une copie et à définir l'horodatage de manière appropriée, par exemple:
Ou encore mieux:
la source
Si vous avez besoin de vous amuser:
Remplacez le chemin par votre chemin de fichier réel
la source
J'ai écrit un script Perl pour ça.
C'est un wrapper autour de vim, enregistré
~/bin/vim-nomtime.pl
et mis en service viaalias vim='~/bin/vim-nomtime.pl'
mon .bashrc.Quelques bonnes fonctionnalités:
prend en charge plusieurs noms de fichiers
prend en charge plusieurs répertoires "surveillés"
prend en charge le répertoire symlinked
peut être amélioré avec d'autres critères
dont la plupart pourraient probablement être également réalisés avec la version pure vim. Les inconvénients de cette solution par rapport à ma solution Pure-Vim souhaitée sont:
il restaure le tampon uniquement après la fermeture de vim, donc si je fais une longue édition et que je sauvegarde régulièrement, le fichier sera "pop-up" comme nouveau jusqu'à ce que je quitte vim
il prend en charge plusieurs fichiers en ligne de commande, mais d'une manière assez naïve - il vérifie uniquement si la chose
@ARGV
est un fichier. Cela ne fonctionnerait probablement pas avec des caractères génériques (par exemplevim note-*.txt
) ou d'autres trucs amusantsce n'est pas anti-crash, probablement même pas anti-HUP (cela pourrait être fait)
... wel, c'est un emballage. (Je veux dire, si nous résolvions tout via le wrapper, combien de wrappers aurions-nous avant que quelque chose de mauvais ne se produise?)
la source
Ce court script conservera l'heure modifiée si un répertoire parent du fichier contient un
.nomtime
fichier:la source
Essayez cette
bash
fonction (sur la base de la réponse de Shâu Sh )c )Maintenant, nous pouvons éditer le fichier et conserver l'heure modifiée en utilisant ceci
la source
vi
uniquement un seul fichier à la fois; ça ne marchera pasvi file1 file2
. (3) Il va sans dire que si l'utilisateur bascule vers un autre fichier avec:e
, il ne sera pas géré.Il existe une option pour copier un horodatage à partir d'un autre fichier.
Exemple:
la source
J'ai trouvé une excellente solution sur cette page Web , qui crée une fonction vim pour enregistrer le fichier actuel tout en préservant l'heure de modification existante, et lie cette fonction à la F4touche de fonction:
Cependant, j'ai trouvé que la fonction d'origine contient un bogue mineur, déclenchant l'avertissement suivant si F4est utilisé deux fois sur le même fichier, car vim devient confus lorsque l'heure de modification change:
Heureusement, cela est facile à résoudre: j'ai ajouté une commande "edit" à la fonction d'origine pour recharger le fichier après avoir restauré l'horodatage, donc vim sait quel temps de modification s'attendre à ce que le fichier ait.
Voici la fonction vim modifiée avec ce correctif de bogue, qui peut être ajoutée à
~/.vimrc
:Remarque: Cette fonction repose sur les versions GNU de
date
,stat
ettouch
.la source
En utilisant certains des concepts décrits ci-dessus, voici un alias à une ligne très rapide et sale pour CSH qui rend une commande "edit" disponible à cet effet:
Vous pouvez facilement utiliser la variable d'environnement $ VISUAL ou $ EDITOR à la place de "vim". De cette façon, vous pouvez exécuter la commande suivante pour modifier les éditeurs par défaut
Désormais, l'alias lui-même n'a plus besoin d'être redéfini pour accueillir différents éditeurs, ce qui le rend un peu plus portable. Si vous utilisez un shell autre que CSH ou TCSH, bien sûr, les exemples ci-dessus peuvent être adaptés en conséquence.
la source