Kan wijzigingen in een bestand in realtime volgen

Mijn vraag is vergelijkbaar met deze hoe een tekstbestand in realtime
maar ik wil het in vim doen. Ik weet dat ik een geopend bestand kan lezen met het tail -f sample.xml-bestand, en wanneer nieuwe inhoud naar het bestand wordt geschreven, zal het ook de nieuwe inhoud naar mijn scherm schrijven. Kan ik vim automatisch de nieuwe gegevens laten vullen wanneer een bestand wordt bijgewerkt?


Antwoord 1, autoriteit 100%

Je kunt :set autoreadzodat vim het bestand leest wanneer het verandert. Je moet er echter (afhankelijk van je platform) focus op geven.

Van de hulp:

Wanneer is gedetecteerd dat een bestand
is veranderd buiten Vim en het
is niet veranderd binnen Vim,
automatisch opnieuw lezen. Wanneer de
bestand is verwijderd dit is niet
klaar.


Antwoord 2, autoriteit 58%

Niet bekend met automatisch, maar je kunt typen:

:e!

om het bestand opnieuw te laden


Antwoord 3, autoriteit 31%

Zet het volgende in uw .vimrc:

" één keer controleren na 4s inactiviteit in de normale modus
automatisch lezen instellen
au CursorHold * checktime

Antwoord 4, autoriteit 14%

zoals @flukus zei in een reactie op een vorig antwoord, je kunt call feedkeys["lh"](het verplaatst de cursor naar rechts en terug naar links, wat normaal gesproken geen kwaad kan bij het bekijken van een logbestand)

Dus, als je de rest van het antwoordcombineert, heb je een oneliner die je kunt uitvoeren vanaf ex (in vim) wanneer nodig:

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

***(als je (bijna) naar het einde van het bestand wilt springen, gebruik dan gewoon “G” in plaats van “lh” met feedkeys)***

Uitleg:

  • autoread: leest het bestand wanneer het van buitenaf wordt gewijzigd (maar het werkt niet op zichzelf, er is geen interne timer of iets dergelijks. Het leest het bestand alleen wanneer vim een ​​actie uitvoert , zoals een commando in ex :!
  • CursorHold * checktime: wanneer de cursor niet wordt verplaatst door de gebruiker gedurende de tijd die is opgegeven in ‘updatetime’ (wat standaard 4000 milliseconden is), wordt checktime uitgevoerd, die controleert op wijzigingen van buitenaf het bestand
  • call feedkeys(“lh”): de cursor wordt één keer naar rechts en naar links verplaatst. en dan gebeurt er niets (… wat betekent dat CursorHold wordt geactiveerd, wat betekent dat we een loophebben)

Bovendien kunt u :set syntax=logtalkinstellen om het logboek te kleuren

Om het scrollen te stoppen wanneer u call feedkeys("G")gebruikt, voert u :set noautoreaduit – nu zal vim vertellen dat het bestand is gewijzigd en vragen of er een is wil de wijzigingen lezen of niet)

(Heeft dit bijwerkingen?)

Bewerken:ik zie één neveneffect: als men “G” als feedkey gebruikt, zal het naar beneden scrollen in elke momenteel geopende buffer?! Het is dus niet mogelijk om in de linkerbuffer van een splittet-venster te werken terwijl de rechterbuffer automatisch door een logbestand scrolt


Antwoord 5, autoriteit 3%

Staartbundelzou moeten doen wat je wilt. Let op, heb het zelf niet gebruikt.


Antwoord 6, autoriteit 2%

Er is ook een plug-in:

https://github.com/djoshea/vim-autoread

Dit was de enige manier waarop ik dit kon laten werken op OSX.


Antwoord 7

Als unix + neovim

:term tail -f <filename>

Natuurlijk zal dit niet voor iedereen werken, maar zo doe ik het.


Antwoord 8

VIM waarschuwt je wanneer een bestand is bijgewerkt, zodat je de wijzigingen die zijn aangebracht sinds je het hebt geopend niet overschrijft. Het zal u op dat moment vragen om het bestand opnieuw te laden.

Other episodes