2010-01-04 4 views

Répondre

-2

Je ne vois pas comment vim pourrait garder une trace de quelque chose qu'il n'a pas fait. Donc, pour ce qui est de la question, je dirais - le contrôle de la source ... mais ce n'est probablement pas la réponse que vous cherchez.

+0

Pourquoi pas, si? Si vim croit que le fichier contient un 'a', alors certains écrivent un' b' dans le fichier, pourquoi Vim ne pourrait-il pas annuler ce 'b'? –

+0

Et ...A moins que je ne mette en place un schéma compliqué à commettre après chaque changement de Vim ... je ne vois pas comment le contrôle de source pourrait aider. –

+0

Et si quelqu'un supprime ou déplace le fichier? Pourquoi Vim ne devrait-il pas être capable de le restaurer ou de le déplacer? ... Ce n'est pas aussi simple. Vim utilise un principe de tampon, c'est-à-dire qu'il enregistre le contenu d'un fichier dans un tampon pendant la phase d'édition. Je crois que c'est pourquoi il vous donne une option pour charger le fichier à nouveau (et pourquoi il ne verrouille pas le fichier). @David (2ème commentaire) - oui. – Rook

0

G'day,

Je ne suis pas sûr, mais ne mise autoread, à savoir entrer :set autoread quitter l'historique d'annulation du fichier lorsqu'il change?

Hmmmm. Je pense probablement pas parce que l'historique des modifications est maintenu en tant que numéros de ligne et vim ne sait pas si ces numéros de ligne sont toujours pertinents pour le fichier modifié.

BTW WTF éditez-vous un fichier qui est en train d'être modifié par des forces externes? Cela semble dangereux pour moi. (-:

+1

par "forces externes" hehe :-) Je ne peux pas m'empêcher de penser à Dark Vador éditer un fichier à distance ... – Rook

+0

non, autoread est en fait juste l'équivalent d'appuyer sur 'L' pour vous automatiquement. – Peter

+0

Je ne sais pas ce que David essaie de faire, mais je l'ai déjà rencontré quand, par exemple, j'écris un script bash. Je fais ma première version, j'essaie de l'exécuter et réalise que j'ai oublié de définir le script comme exécutable. Si je chmod u + x le script pendant que le fichier est chargé dans vim, vim me dira utilement que le fichier a changé et proposera de le charger, même si seuls les drapeaux ont changé. La même chose si vous utilisez un système de contrôle de source qui manipule les bits d'autorisation d'écriture, comme Perforce. –

1

Je ne crois pas que ce soit possible

Il y a un très correctif utile disponible pour le code source de vim disponible here qui conserve l'historique undo après avoir quitté vim et le redémarrage Cependant, je l'ai.. juste essayé et il semble échouer lorsque le fichier est édité en externe.Il peut être utile de contacter l'auteur ou signaler un bug sur le site web de patch pour voir si cela peut être surmonté

+0

Merci pour le lien vim-debug ... Et je vais poser une question à ce sujet sur les listes - merci. –

+0

Un autre lien utile est http://repo.or.cz/w/vim_extended.git qui a aussi quelques autres correctifs intéressants. – DrAl

0

Ceci est un workarou nd I utilisé Vim avant la version 7.3:

" :e usually clears undo history, so we don't really do :e any more. 
" Instead we delete the contents of the buffer, then read the file in, which 
" is an operation we can undo. We must delete the top (empty) line also. 

:map :e<Enter> :%d<Enter>:r<Enter>:0<Enter>dd 

Quand vous voyez le message d'avertissement, vous devez frapper o k au lieu de l OAD, puis effectuez la charge vous-même: :e<Enter>

Il y a deux inconvénients (bien que j'ai trouvé le compromis acceptable):

  • Vous perdez la ligne sur laquelle vous étiez. Votre curseur reste assis en haut du fichier. Vim continue de penser que le tampon n'est pas synchronisé avec le fichier, donc lors de la prochaine sauvegarde, vous devrez peut-être faire :w! au lieu du :w normal, et vous devrez appuyer sur y pour confirmer l'écrasement.

Modifier: Il peut y avoir a workaround for the second problem.

Edit: Le premier problème pourrait être résolu avec un peu plus de scripts (voir :h line.)

Questions connexes