Ma question est similaire à celle-ci: comment surveiller un fichier texte en temps réel,
mais je veux le faire dans vim. Je sais que je peux lire un fichier d'utilisation de tail -f sample.xml
fichier ouvert , et lorsqu'un nouveau contenu est écrit dans le fichier, il écrira également le nouveau contenu sur mon écran. Puis-je demander à vim de remplir automatiquement les nouvelles données lorsqu'un fichier est mis à jour?
104
autoread
fonctionnement et ses limites.Je ne sais pas automatiquement, mais vous pouvez taper:
pour recharger le fichier
la source
Mettez ce qui suit dans votre
.vimrc
:la source
comme @flukus l'a dit dans un commentaire à une réponse précédente, vous pouvez
call feedkeys["lh"]
(cela déplace le curseur vers la droite et le retour vers la gauche, ce qui normalement ne fait pas de mal lors de la visualisation d'un fichier journal)Donc, si vous combinez le reste de la réponse, vous avez un oneliner que vous pouvez exécuter depuis ex (whithin vim) si nécessaire:
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(si vous voulez sauter (presque) à la fin du fichier, utilisez simplement "G" au lieu de "lh" avec les touches d'alimentation)
Explication:
- lecture automatique : lit le fichier 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 du genre. Il ne lira le fichier que lorsque vim effectue 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 millisecondes par défaut), checktime est exécuté, qui vérifie les changements de l'extérieur du fichier
- appelez feedkeys ("lh") : le curseur est déplacé une fois, à droite et en arrière à gauche. et puis rien ne se passe (... ce qui signifie que CursorHold est déclenché, ce qui signifie que nous avons une boucle )
De plus, vous pouvez
:set syntax=logtalk
colorer le journalPour arrêter le défilement lors de l'utilisation
call feedkeys("G")
, exécutez:set noautoread
- maintenant vim dira que le fichier a été modifié et demandera si l'on veut lire les modifications ou non)(Cela a-t-il des effets secondaires?)
Edit: je vois un effet secondaire: si on utilise "G" comme feedkey, il fera défiler vers le bas chaque tampon actuellement ouvert?! Il n'est donc pas possible de travailler dans le tampon gauche d'une fenêtre de splittet tout en faisant défiler automatiquement le tampon droit dans un fichier journal
la source
Collez ceci dans votre .vimrc et cela devrait fonctionner comme un boss. (Pris à partir de: http://vim.wikia.com/wiki/Have_Vim_check_automatically_if_the_file_has_changed_externally )
la source
CursorHold
est exécuté une fois . Donc, si vous allez prendre un café, ou faites quelque chose dans une autre fenêtre, il ne sera pas mis à jour.Tail Bundle devrait faire ce que vous voulez. Remarque, je ne l'ai pas utilisé moi-même.
la source
Si unix + neovim
:term tail -f <filename>
Évidemment, cela ne fonctionnera pas pour tout le monde, mais c'est comme ça que je le fais.
la source
Il existe également un plugin:
https://github.com/djoshea/vim-autoread
C'était la seule façon dont je pouvais faire fonctionner cela sur OSX.
la source
VIM vous avertira lorsqu'un fichier a été mis à jour afin que vous n'écrasiez pas les modifications apportées depuis que vous l'avez ouvert. Il vous demandera à ce stade de recharger le fichier.
la source