Vim无法保存文件(E212)

67
有时候当我使用vim some/path/newfile创建一个文件,并编辑后尝试保存,vim会提示错误。
E212 Can't open file for writing.
这似乎只会在新文件位于系统目录时发生。 :w! 无法覆盖此错误。 如何在不必将其保存到临时位置,退出,然后使用sudo重命名的情况下写入当前缓冲区?

1
有时候,如果在 w! 之间加一个空格,它也可以工作。(至少在我使用更重的 vim vim-gtk 而不仅仅是轻量级的 vim 的 Linux 中,这个方法对我有效,虽然我相信在普通的 vim 中它也会同样有效。)不过,我不知道 Peter 的答案。w!! 对我也有效。 - dylnmc
12个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
107

这将要求您输入root密码,然后按照您的要求保存更改:

:w !sudo tee %

然后在提示符处输入(L)oad,以便在保存文件后重新加载该文件。


1
这个可行!也许可以与@Peter的答案结合起来,在.vimrc文件中创建一个vim别名? - StuWeldon
12
它告诉我“shell返回1”。 - ClementWalter
当我在运行Ubuntu 20.04的WSL中尝试这个操作时,我只收到了一个“操作不允许”的错误。 - Your Code Made Me Suicidal

20

您可以先使用mkdir创建文件夹,然后再进行保存。


8
无助于解决问题。这个问题不是关于不存在的目录,而是关于如何在现有文件中作为普通用户(例如)进行编辑,当只有root用户才能写入该文件时。在这种情况下,没有要创建的缺失目录。 - nobody
我发现这个答案很有帮助,因为我和提问者有同样的问题,并且我没有意识到我要写入的文件不仅是新的,而且我的路径中的一个目录也是新的。如果你的情况是这样,使用mkdir命令可以解决这个问题。 - undefined

18
将以下行添加到您的.vimrc文件中:
cmap w!! %!sudo tee > /dev/null

然后,您可以执行

:w!!

当你进入这个位置后,它将使用sudo来编写文件,非常方便。


我喜欢这个想法。键入:w!!将命令替换为!sudo tee > /dev/null,但它只显示n“行过滤”,文件实际上并没有被创建。看起来是/dev/null导致了这个问题? - StuWeldon
4
好主意——w!!比我的解决方案容易记多了。在我的OS X上,我使用的是cmap w!! %!sudo tee % - Brent Faust

9

您可以通过使用“sudo”来启动编辑会话来避免此问题。

sudo vi name-of-file

3

3

如果在Windows 7或更高版本中出现这种情况,请以管理员身份运行VI编辑器。右键单击应用程序并选择“以管理员身份运行”。这个问题将会被解决。此外,该错误是由于管理权限引起的。


3

使用vim创建新文件

你可以分两步来完成这个任务,首先使用mkdir命令创建'some'和'path'文件夹;其次进入'path'文件夹,使用sudo vim newfile命令创建新文件,最后保存即可。


2
请确保您尝试保存文件的目录存在,并且您有编辑该文件的权限。 您可以在Vim中键入:help message以获取有关此错误消息和其他错误消息的更多信息。一旦文档出现,尝试通过键入/E212进行搜索。您也可以在线查看文档,网址为http://vimdoc.sourceforge.net/htmldoc/message.html,并使用CTRL-F查找相关内容。

1
特别是,有时候vim会改变你的缓冲区当前工作目录。在这种情况下,中间目录可能不存在,这就导致了E212错误。你需要使用:cd ORIGINAL_FOLDER_PATH将当前目录改回来,以解决这个问题并能够再次保存。 - Zenul_Abidin

1

就算可能不怎么值得,你也应该确保在尝试保存文件的分区中有足够的存储空间。我不得不释放一些 /home 目录下的空间,这解决了问题。


1

我知道这是一个老问题,但这是我解决它的方法。你的文件可能被设置为不可变的,这意味着你无法编辑它。

你可以使用 lsattr /path/to/file.txt 来检查。

如果是这样,使用 chattr -i /etc/resolv.conf 来使其不再是不可变的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,