50 votes

Rechargement automatique d'un fichier dans le VIM dès qu'il est modifié sur le disque

En supposant qu'un fichier n'ait pas de modifications non sauvegardées dans la mémoire tampon du VIM, j'aimerais qu'il se recharge automatiquement si le fichier change sur le disque. Le cas le plus fréquent est la mise à jour de la copie de travail dans laquelle se trouve le fichier.

Comment y parvenir ?

41voto

Michael Medin Points 605

En su ~/.vimrc :

set autoread

20voto

ErichBSchulz Points 381

Voici ce qui a fonctionné pour moi

set autoread                                                                                                                                                                                    
au CursorHold * checktime  

La première ligne n'était pas suffisante en soi. Vous pouvez mettre dans votre .vimrc

crédit à Phan Hai Quang

9voto

MacMartin Points 690

De cette 回答 (en référence à une réponse de PhanHaiQuang et un commentaire de @flukus)

On peut lancer cet outil à partir d'ex (dans vim) quand on en a besoin (ou mettre chaque commande dans vimrc, pour l'ouverture des fichiers journaux).

:set autoread | au CursorHold * checktime | call feedkeys("lh")

Explication :
- autoradiation Le fichier est lu lorsqu'il est modifié de l'extérieur (mais il ne fonctionne pas tout seul, il n'y a pas de minuterie interne ou quelque chose de ce genre). Il ne lira le fichier que lorsque vim fera une action, comme une commande dans ex :!
- CursorHold * checktime Lorsque le curseur n'est pas déplacé par l'utilisateur pendant le temps spécifié dans 'updatetime' (qui est de 4000 milisecondes par défaut), checktime est exécuté, ce qui permet de vérifier les changements provenant de l'extérieur du fichier.
- call feedkeys("lh") Le curseur est déplacé une fois, vers la droite et de nouveau vers la gauche, puis rien ne se passe (... ce qui signifie que le CursorHold est déclenché, ce qui signifie qu'il y a un boucle )

6voto

Bryan Hunt Points 193

La recherche automatique ne fonctionne pas correctement. Ce qui suit fonctionne pour moi :

Vous devez d'abord installer le script à partir de aquí .

J'ai obtenu les meilleurs résultats en appelant directement la fonction setup, comme suit.

let autoreadargs={'autoread':1} 
execute WatchForChanges("*",autoreadargs) 

La raison en est que je veux utiliser une configuration ipython/écran/vim.

Vous pouvez facilement le convertir en une version améliorée de la vue.

script le processus

mkdir -p ~/bin
cat <<`OUT` > ~/bin/vimviewer
#!/usr/bin/env sh
exec vim -n --cmd "source /home/bryan/.vim/.vimrc.watchforchanges | let autoreadargs={'autoread':1} | execute WatchForChanges('*',autoreadargs)" $@
`OUT`

chmod 755 ~/bin/vimviewer
vimview test.txt

4voto

Andreas Ley Points 208

vim-autoread a fonctionné pour moi jusqu'à présent :

vim-autoread

Vim rechargera automatiquement les fichiers qui ont été disque mais qui n'ont pas été modifiés dans la mémoire tampon depuis la dernière écriture de vim. Cela permet à un fichier ouvert dans vim d'être édité à l'aide d'une autre application et sauvegardé. Lors du retour à vim, tant que vous n'avez pas modifié le fichier depuis la dernière modification, le fichier sera automatiquement mis à jour pour refléter les changements effectués sur le disque, comme si vous aviez appuyé sur :e manuellement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X