使用vi/vim编辑只读文件,打开的时候忘记加sudo怎么办

在linux服务器上操作一些配置文件时,有很大一部分都是只读文件,我们当然知道要使用sudo命令用管理员身份来打开并编辑,但是有时候需要编辑好多文件,某一个文件打开的时候很有可能就忘记加sudo,这时候问题来了,当我们愉快的编辑完成之后,输入:wq 时就悲剧了,提示没有权限,那我们怎么办呢?记下刚刚修改的内容,强制退出,重新用管理员身份打开,重新编辑。好麻烦有木有,有一个更简单的方法,如下:

:w !sudo tee %

如果不是root用户,这里会提示你输入密码。

这条命令是什么意思呢?

命令:w !{cmd},让 vim 执行一个外部命令{cmd},然后把当前缓冲区的内容从 stdin 传入。

tee 是一个把 stdin 保存到文件的小工具。

而 %,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。

所以执行这个命令,就相当于从vim外部修改了当前编辑的文件。

执行完上面的命令,vi/vim会有一个提示

W12: Warning: File "你的文件路径" has changed and the buffer was changed in Vim as well See ":help W12" for more info.
[O]K, (L)oad File:

这个是说你的文件已经被改过了,而当前vim打开的还是原始的文件,是确定还是重新载入文件?
我们当然是要新文件了,所以敲入 L ,这时候就可以放心的退出编辑器了。

One comment:

评论已关闭。