Vim错误E138:无法写入viminfo文件$ HOME / .viminfo!


20

恐怕我遇到了很奇怪的事情。当我正常打开文件时vim README.txt,一切正常。但是在时sudo vim README.txt,该文件呈现空白,并E138: Can't write viminfo file $HOME/.viminfo!在尝试退出时给我一个错误。

我怀疑.viminfo文件已损坏,因此将其删除。这个问题仍然存在。有人可以帮忙吗?


您可以在跑步时发布结果ls .viminf*吗?
cuonglm

viminfo文件具有哪些权限?输出是ls -la .vininf*什么?
darnir 2014年

Answers:


29

运行sudo vim时,以root用户身份启动vim。这意味着问题是/ root中的viminfo文件。你应该做rm /root/.viminf*

要确保这一点,请运行sudo vim并执行以下命令::!echo $HOME。这将显示您的主目录是/ root。

我建议您不要以root身份运行vim,而应该使用sudoedit。这是一个更安全的解决方案,因为编辑器不是以root身份运行。您永远不知道插件会做什么。另外,它允许您在vim中使用您自己的设置和插件,而不是roots vimrc中的设置和插件。sudoedit与运行相同sudo -e。sudoedit的工作方式是为调用用户(您)拥有的文件制作一个临时副本。完成编辑后,所做的更改将被写入实际文件,而临时文件将被删除。

作为一般经验法则:如果不需要,请不要以root用户身份运行。


我认为您可能会因以下注释而使我免于烦恼:“这是一个更安全的解决方案,因为编辑器未以root用户身份运行。您永远不知道插件可以做什么。 ”我相信我已经想到了所有漏洞,但我错了。
bballdave025

14

我在每个出口都收到此错误。我没有用sudo。它明确提到了我的用户主目录:

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

删除~/.viminfo并不能解决该错误。

事实证明,我有一堆viminfo临时文件,并删除了那些已解决的问题:

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

在这里找到此解决方案。


5

尝试将:wq文件完全填满时,我收到相同的错误。如果收到此消息,则可能希望检查可用磁盘空间。


3

创建主目录的一种更简洁的方法是使用linux为您提供的框架。

sudo cp -a /etc/skel /home/usernmae && sudo chown -R usernmae:usernmae /home/usernmae

1
恐怕这个问题与主目录的创建几乎没有关系...
John WH Smith

您需要创建一个主目录,以便使vim能够保存到.viminfo文件,因此可以使用上述命令。
里克

1
在您得出这样的结论之前,有许多原因导致该文件不存在。缺少主目录可能比丢失文件引起更大的麻烦; 因此,我可以使用“创建主目录”回答几乎所有“丢失的文件”问题。:)
约翰WH史密斯

1
+1就我而言,发生此错误的原因恰恰是因为我正在以没有主目录的用户身份编辑文件。
佐尔坦

3

对我来说,问题是我已将主目录更改为NFS挂载内的位置。由于某种原因,这导致目录的所有者为“ nobody”。为“其他”添加写权限解决了该问题,因为我显然不是文件的所有者。

chmod o+w ~/.viminfo

1
能否请您澄清一下答案。Oneline答案在SE中不算很好
Romeo Ninov

2
奇怪的是,添加其他写权限可以帮助您。也许您不拥有自己的文件?
杰夫·谢勒

这对我有用。我猜我的“ .viminfo”是由用户“ root”创建的,如果用户“ ubuntu”尝试对其进行修改,则他需要写权限。简而言之,“-rw-r--r--”变为“ -rw-r--rw-”。
emeraldhieu

0

这很可能是由于主目录已用尽磁盘空间并且任何新的vim操作都无法在.viminfo文件中写入而发生的。


3
这似乎有些牵强:您有任何证据吗?
jasonwryan

那是一种可能,是的。
Ned64

0

更新Makefile的内容时遇到相同的问题。我需要一个局部变量并决定命名它HOME,所以我进入了这一行HOME=2.154。这将导致该vim-HOME设置被不存在的目录替换。请勿将HOME变量用于其他用途。


1
请注意,这HOME是一个预定义的环境变量,通常重新定义它不是一个好主意。
巴伦

0

我认为这可能仅适用于旧版本的linux / vi,但我发现根目录下的主目录中存在临时文件,其文件名为/root/.viminfa.tmp ... /root/.viminfz.tmp和其中有26个时间戳记涵盖了数年。当所有的az都被占用时,我们的字母用完了。我删除了所有这些文件,问题消失了。当然,亨里克(Henrik) # rm -rf ~/.viminf* 可以解决此问题。


0

似乎您已清除环境变量。

做这个:

导出HOME = / root

这样可以解决您的问题。


0

我不确定自己是如何遇到这种情况的,因为我不记得使用过打开任何文件,sudo vim但是在每个:q文件上我都得到类似的提示:“无法编写viminfo是不可写的”。

rm ~/.viminfo没有解决,它~/.vim/是空的。

chmod 666 ~/.viminfo解决了在Vim中退出文件时的警告消息。虽然我不确定这是否是最佳解决方案?这是有道理的,为什么它停止了警告,因为.viminfo以前是rw ------,我认为这是在vim命令历史记录中写入的。


0

我的情况是,/root/.viminfo完全没有文件。我触摸文件后,错误停止了,并且在退出vim时更新了文件。PS:这是嵌入式Linux的windriver。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.