A resposta para sua pergunta do título é o que você observou. No manual do usuário do vim:help 21.3
Quando você executa o Vim várias vezes, a última saída armazena suas informações. Isso pode causar a perda de informações que saíam anteriormente do Vims armazenadas. Cada item pode ser lembrado apenas uma vez.
No entanto, o nome do arquivo do arquivo viminfo (onde o histórico de comandos está armazenado, entre outras coisas, como marcas globais e conteúdo do registro, se estiver configurado) é alterável! Isso significa que você pode configurar diferentes 'históricos' para diferentes projetos ou instâncias do vim. Supondo que você não execute mais de uma instância do vim por projeto, gerenciar o nome do arquivo viminfo via vimrc (ou outro plugin de configurações do projeto) é uma ótima maneira de lidar com isso.
Configurar arquivos viminfo alternativos
Para o gerenciamento no nível do projeto, queremos configurar o vim para salvar seu viminfo em um arquivo diferente. Isso pode ser feito dentro de um vim em execução antes de sair ou pelo vimrc, por exemplo, você pode ter linhas no vimrc que detectam um diretório específico como pertencente a um projeto.
:set viminfo+=nPath/to/custom/viminfofile
Um exemplo de como o vimrc o define automaticamente com base no diretório:
if getcwd() == "/projects/projA"
set viminfo+=n~/.viminfo-projA
endif
O resultado acima é que o histórico específico do projeto será carregado na inicialização e salvo na saída, se o vim for iniciado no diretório / projects / projA.
Carregar um viminfo alternativo durante a inicialização
Isso é bom para o caso em que você deseja salvar seu histórico para o lado e carregá-lo mais tarde, sem gerenciá-lo no nível do projeto.
Primeiro, para salvar o histórico, você adiciona à opção viminfo como acima antes de sair. Para carregar o histórico, inicie o vim com a opção -i
vim -i Path/to/custom/viminfofile
Se você não deseja sair do vim para salvar o arquivo viminfo, pode usar :wv
( :wviminfo
). Isso salva o arquivo viminfo sem sair do vim de acordo com a configuração n acima. E você também pode :wv SomeOtherFile
salvar para um local que não seja o mesmo da configuração na opção viminfo. Isso pode ser mais conveniente do que configurar o nome do arquivo a ser usado na saída, mas não impede o vim de usar o arquivo padrão depois que ele sai.
Por exemplo, no primeiro vim:
:wv ~/customInfo
e no segundo terminal:
vim -i ~/customInfo
Ou, se um segundo vim já estiver em execução e você desejar carregar o viminfo:
:rv ~/customInfo
Observe que, :wv
e :rv
não altere o nome do arquivo, o vim salvará na saída nem o nome do arquivo lido durante a inicialização.
Informação adicional
Descrição de set viminfo+=nSomePath
: Usamos o comando set para ajustar a opção denominada viminfo
. O +=
indica que queremos acrescentar à opção, não mudar tudo. n
Anexamos a opção que especifica o nome do arquivo para viminfo. Imediatamente após n
termos SomePath
qual será o nome do arquivo usado para salvar o viminfo.
A documentação para wv
( :help wv
) indica que este comando primeiro lê o arquivo viminfo e depois mescla entre informações antigas e novas. Até o momento, não tenho informações sobre como a fusão funciona nesse caso, mas acho que mantém marcas de arquivos e registros desconhecidos que não estão definidos na sessão atual.