O Vim mantém um histórico dos comandos ex (acessíveis via :↑e q:), e esse histórico persiste após o encerramento.
Se eu executar várias instâncias do Vim (mesmo usuário, mesmo diretório inicial), como o Vim arbitrará entre os históricos de comandos? Parece que o último processo para sair vence. Existe uma maneira de manter o histórico de comandos de todas as instâncias?
command-line
command-history
persistent-state
200_success
fonte
fonte
~/.viminfo
pertence a você. Um erro comum é que as pessoas executem osudo vim ...
que, se você não executou o vim como seu próprio usuário, criará~/.viminfo
como root. Se esse for o problema, sugiro aprender a usarsudoedit
ousudo -e
editar arquivos privilegiados.chown
quando meu .viminfo voltou para mim, o consertei. (Não sei como sua propriedade tem mudado para a raiz, desde que eu sempre useisudoedit
, mas tudo bem.)Respostas:
A resposta para sua pergunta do título é o que você observou. No manual do usuário do vim
:help 21.3
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.
Um exemplo de como o vimrc o define automaticamente com base no diretório:
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
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:
e no segundo terminal:
Ou, se um segundo vim já estiver em execução e você desejar carregar o viminfo:
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 denominadaviminfo
. 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ósn
termosSomePath
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.fonte