Erro V13 E138: Não é possível gravar o arquivo viminfo $ HOME / .viminfo!

20

Receio ter encontrado algo bastante estranho. Quando abro um arquivo normalmente, vim README.txtestá tudo bem. Porém sudo vim README.txt, o arquivo fica em branco e gera um E138: Can't write viminfo file $HOME/.viminfo!erro ao tentar sair.

Suspeitei que o .viminfoarquivo estava corrompido, então o excluí. Esse problema permanece. Alguém pode ajudar?

James Adam Buckland
fonte
Você pode postar resultado ao executar ls .viminf*?
precisa
Quais são as permissões no arquivo viminfo? Qual é a saída de ls -la .vininf*?
darnir

Respostas:

29

Quando você executa, sudo viminicia o vim como root. Isso significa que é o arquivo viminfo em / root que é o problema. Você deveria fazer rm /root/.viminf*.

Para certificar-se disso, executar sudo vime executar o comando: :!echo $HOME. Isso mostrará que seu diretório pessoal é / root.

Eu recomendaria que você não execute o vim como root, mas use sudoedit . Esta é uma solução mais segura, pois o editor não está sendo executado como root. Você nunca sabe o que um plug-in pode fazer. Além disso, ele permite que você use suas próprias configurações e plugins no vim e não os do root vimrc. sudoedité o mesmo que correr sudo -e. O sudoedit funciona criando uma cópia temporária do arquivo que pertence ao usuário que está chamando (você). Quando você termina de editar, as alterações são gravadas no arquivo real e o arquivo temporário é excluído.

Como regra geral: não execute as coisas como root se não for necessário.

arnefm
fonte
Acho que você pode ter me poupado de um monte de preocupação com a observação: "Esta é uma solução mais segura, pois o editor não está sendo executado como root. Você nunca sabe o que um plug-in pode fazer. " Eu acreditava que tinha pensado em tudo. vulnerabilidades, mas eu estava errado.
bballdave025 29/08
14

Eu tenho esse erro em todas as saídas. Eu não usei sudo. Mencionou explicitamente meu diretório pessoal do usuário:

E138: Can't write viminfo file /Users/henrik/.viminfo!

Removendo ~/.viminfo não corrigiu o erro.

Acontece que eu tinha vários arquivos temporários do viminfo e, removendo-os, o problema foi corrigido:

 ls ~/.viminf*      # If you want to see the files.
 rm -rf ~/.viminf*  # Remove them.

Encontrei esta solução aqui .

Henrik N
fonte
5

Eu recebi o mesmo erro ao tentar :wqum arquivo em um disco que estava completamente cheio. Se você receber esta mensagem, poderá verificar o espaço em disco disponível.

duhaime
fonte
3

Uma maneira muito mais limpa de criar um diretório inicial seria usar o esqueleto que o linux fornece para você, por exemplo.

sudo cp -a /etc/skel /home/usernmae && sudo chown -R usernmae:usernmae /home/usernmae
Rick
fonte
11
Temo que a questão tem muito pouco a ver com a criação de diretórios home ...
John WH Smith
Você precisa criar um diretório inicial para que o vim possa salvar no arquivo .viminfo, portanto, sim, o comando acima é aplicável.
Rick
11
Existem inúmeras razões pelas quais esse arquivo não existiria, antes que você possa chegar a essa conclusão. A ausência de um diretório inicial provavelmente causaria muito mais problemas do que apenas um arquivo ausente; Por esse motivo, eu poderia responder a qualquer pergunta sobre "arquivo ausente" com "criar seu diretório pessoal". :)
John WH Smith
11
+1 No meu caso, esse erro ocorreu exatamente porque eu estava editando um arquivo como um usuário que não tinha um diretório inicial.
Zoltán
3

Para mim, o problema era que eu havia mudado meu diretório pessoal para um local dentro de uma montagem NFS. Por alguma razão, isso resultou no proprietário do diretório como "ninguém". Adicionar permissões de gravação para "outro" resolveu o problema, pois eu claramente não era o proprietário do arquivo.

chmod o+w ~/.viminfo
Jon Deaton
fonte
11
Você pode esclarecer sua resposta. Respostas oneline não contam como bons no SE
Romeo Ninov
2
É estranho que a adição de outras permissões de gravação tenha ajudado. Talvez você não possua seu próprio arquivo?
Jeff Schaller
Isso funciona para mim. Eu acho que meu ".viminfo" foi criado pelo usuário "root" e se o usuário "ubuntu" tentar modificá-lo, ele precisará de uma permissão de gravação. Em poucas palavras, "-rw-r - r--" se torna "-rw-r - rw-".
emeraldhieu 15/06
0

Provavelmente, isso está acontecendo porque o diretório inicial ficou sem espaço em disco e qualquer nova operação do vim não pode gravar no arquivo .viminfo.

psglinux
fonte
3
Isso parece um pouco exagerado: você tem alguma evidência disso?
jasonwryan
Essa é uma possibilidade, sim.
Ned64 23/10
0

Eu tive o mesmo problema ao atualizar o conteúdo do Makefile. Eu precisava de uma variável local e decidi nomeá-la HOME, então entrei na linha HOME=2.154. Isso faz com que a vim-HOMEconfiguração seja substituída por um diretório inexistente. Não use a HOMEvariável para outro uso.

user191855
fonte
11
Observe que essa HOMEé uma variável de ambiente predefinida e redefini-la geralmente não é uma boa ideia.
Barun
0

Eu acho que isso pode se aplicar apenas a versões bastante antigas do linux / vi, mas o que descobri foi que havia arquivos temporários no diretório inicial do root com os nomes de arquivo /root/.viminfa.tmp ... /root/.viminfz.tmp e que havia 26 deles com timestamps cobrindo vários anos. Ficamos sem letras do alfabeto quando todos os az foram tirados. Eu removi todos esses arquivos e o problema desapareceu. É claro que a Henrik's # rm -rf ~/.viminf* resolveria esse problema perfeitamente.

Stephen Edge
fonte
0

Parece que você limpou as variáveis ​​de ambiente.

Fazem isto:

exportar HOME = / root

Isso deve resolver seu problema.

Ashfaq
fonte
0

Não tenho certeza de como me deparei com esse cenário, pois não me lembro de abrir nenhum arquivo usando, sudo vimmas em cada :qum dos arquivos eu estava recebendo uma mensagem semelhante 'Não é possível gravar o viminfo não é gravável'.

rm ~/.viminfonão resolveu e ~/.vim/estava vazio.

chmod 666 ~/.viminforesolveu essa mensagem de aviso ao sair de um arquivo no Vim. Embora eu não tenha certeza de que esta é a melhor solução? Faz sentido por que interrompeu o aviso desde que .viminfo foi rw ------ antes e eu presumo que esteja sendo gravado com históricos de comandos do vim.

David Tahvildaran
fonte
0

No meu cenário, foi a ausência de /root/.viminfoarquivo completamente. Depois que toquei no arquivo, o erro parou e o arquivo foi atualizado ao sair do vim. PS: Este é o Linux embarcado no Windriver.

Naveen Gara
fonte