J'ai eu le problème de regarder le contenu d'un fichier, de mettre à jour le fichier en externe, d'afficher le fichier modifié et d'avoir la possibilité de le modifier si nécessaire. Je l'ai résolu avec les options de ligne de commande serveur / distant de Vim, inspirées par cette réponse .
Avec les commandes suivantes, un fichier peut être rechargé via une commande externe. Commencez par ouvrir le fichier en question avec Vim tout en démarrant une instance de serveur.
vim --servername JABBERWOCKY /tmp/alice.log
Supposons que le fichier a été modifié en externe, par exemple par un fichier echo "Curiouser and curiouser" >> /tmp/alice.log
. Si nécessaire, envoyez une commande à l'instance du serveur pour recharger le fichier. Cette commande se terminera rapidement et ne générera pas un nouvel éditeur.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
Si le fichier ouvert a été modifié dans Vim et en externe, il y aura un conflit lors du rechargement (un message d'avertissement apparaîtra). Pour ce cas, une décision doit être prise: laissez-le avec cela et conservez les modifications dans Vim, ou ignorez les modifications locales et forcez un rechargement .
La commande --remote-send
ci-dessus nécessite un rechargement manuel. Cependant, cette commande pourrait être liée à une simple boucle, en utilisant for
/ while
, ou en utilisant un hacky one-liner sous Linux / Unix:
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
Bien que cela n’ait pas été testé, je suis certain qu’un tel résultat pourrait également être réalisé dans PowerShell.
Sous Linux / Unix, une approche basée sur les événements peut être réalisée en écoutant les événements du système de fichiers en utilisant par exemple la bibliothèque inotify , si vous n’utilisez pas de systèmes de fichiers trop fous. Personnellement, j'aime beaucoup utiliser l'outil entr , qui semble être inclus dans les principales distributions Linux. Alors je reçois:
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>