Ho avuto il problema di guardare il contenuto di un file, aggiornare il file esternamente, visualizzare il file modificato e avere la possibilità di modificarlo quando necessario. L'ho risolto con il server Vim / le opzioni della riga di comando remota, ispirato da questa risposta .
Con i seguenti comandi è possibile ricaricare un file tramite un comando esterno. Innanzitutto, apri il file in questione con Vim, mentre avvii un'istanza del server.
vim --servername JABBERWOCKY /tmp/alice.log
Supponiamo che il file sia stato modificato esternamente, ad esempio da a echo "Curiouser and curiouser" >> /tmp/alice.log
. Se necessario, inviare un comando all'istanza del server per ricaricare il file. Questo comando finirà rapidamente e non genererà un nuovo editor.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
Se il file aperto è stato modificato in Vim ed esternamente, si verificherà un conflitto durante il ricaricamento (verrà visualizzato un messaggio di avviso). In tal caso, è necessario prendere una decisione: lasciarlo con quello e conservare le modifiche in Vim, oppure scartare le modifiche locali e forzare una ricarica .
Il comando con --remote-send
sopra richiede il ricaricamento manuale. Tuttavia, quel comando potrebbe essere legato a un semplice ciclo, usando Bash's for
/ while
, o usando un hacky one-liner in Linux / Unix:
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
Sebbene non sia stato testato, sono certo che qualcosa di simile potrebbe essere realizzato anche in PowerShell.
Su Linux / Unix è possibile realizzare un approccio basato sugli eventi ascoltando gli eventi del file system utilizzando, ad esempio, la libreria inotify , se non si utilizzano file system troppo pazzi. Personalmente mi piace usare molto lo strumento entr , che sembra essere incluso nelle principali distribuzioni Linux. Quindi ottengo:
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>