Eu tive o problema de examinar o conteúdo de um arquivo, atualizar o arquivo externamente, exibir o arquivo alterado e ter a opção de editá-lo quando necessário. Eu o resolvi com as opções de linha de comando remota / servidor Vim, inspiradas nesta resposta .
Com os seguintes comandos, um arquivo pode ser recarregado através de um comando externo. Primeiro, abra o arquivo em questão com o Vim, enquanto inicia uma instância do servidor.
vim --servername JABBERWOCKY /tmp/alice.log
Vamos supor que o arquivo tenha sido alterado externamente, por exemplo, por a echo "Curiouser and curiouser" >> /tmp/alice.log
. Quando necessário, envie um comando para a instância do servidor para recarregar o arquivo. Este comando será concluído rapidamente e não gerará um novo editor.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
Se o arquivo aberto foi alterado no Vim e externamente, haverá um conflito durante a recarga (uma mensagem de aviso será exibida). Nesse caso, é necessário tomar uma decisão: deixe com isso e mantenha as alterações no Vim ou descarte as alterações locais e force a recarga .
O comando --remote-send
acima requer recarregamento manual. No entanto, esse comando pode ser vinculado a um loop simples, usando o for
/ do Bash while
, ou usando um liner hacky no Linux / Unix:
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
Embora não tenha sido testado, tenho certeza de que algo assim também pode ser realizado no PowerShell.
No Linux / Unix, uma abordagem orientada a eventos pode ser realizada ouvindo os eventos do sistema de arquivos usando, por exemplo, a biblioteca inotify , se você não estiver usando sistemas de arquivos muito loucos. Pessoalmente, gosto muito de usar a ferramenta entr , que parece estar incluída nas principais distribuições Linux. Então eu recebo:
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>