Posso compartilhar o histórico de comandos do Vim entre instâncias em tempo real?
Com isso, quero dizer o que as pessoas fazem no bash desta maneira:
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Ou seja, quando executo um comando echo test1
em um shell e pressiono Upoutro, entendo echo test1
. (Para ser preciso, é preciso pressionar Enterantes Uppara que funcione.)
Isso é possível com o Vim? No começo eu pensei que usar a +clientserver
opção funcionaria. Mas isso parece ser outra coisa.
command-history
x-yuri
fonte
fonte
Respostas:
O histórico do comando é armazenado no arquivo viminfo (
:help viminfo
). Geralmente, isso é lido na inicialização e gravado na saída, mas você pode explicitamente persistir e sincronizar as instâncias do Vim com uma combinação de:wviminfo
e:rviminfo
. Observe que isso sincronizará toda a informação; ou seja, também registrar conteúdo, marcas, listas de buffer, etc.fonte
No Vim, o mais próximo que você pode chegar é (como a resposta de Ingo e o comentário de Christian mencionados) é:
É importante perceber que os
Focus*
comandos automáticos nem sempre são executados quando você usa o Vim em um terminal, principalmente se você estiver usando tmux ou screen. Você deve testar isso primeiro usando:au FocusLost :echoerr "Focus lost!"
.Até onde eu sei, não há uma boa solução alternativa, se esses comandos automáticos não funcionarem para você. Usar outros eventos (como
CursorHold
) parece problemático para mim devido a problemas de tempo que quase certamente surgirão.O Neovim vem com o "ShaDa", que substitui o sistema viminfo do Vim. Um aspecto em que é melhor é mesclar arquivos de diferentes instâncias, e enquanto ele não suporta diretamente a sincronização entre várias instâncias ( ainda ), este parece funcionar bem para pelo menos um desenvolvedor Neovim :
Veja
:help shada-merging
para detalhes sobre o processo de mesclagem.fonte
:h viminfo-timestamp