[Vim]以sudo权限来保存vim打开的readonly文件

原创 2015年07月09日 23:49:23

[Vim]以sudo权限来保存vim打开的readonly文件

本文要说的命令如下:

:w ! sudo tee % > /dev/null

在做 linux 配置的時候,会改到只讀的文件,比如 /etc/profile

$ ls -al /etc/profile
-rw-r–r– 1 root root 1139 Mar 14 17:30 /etc/profile

用 vim 打開該只文件 /etc/profile 修改后,保存會出錯:

:w
E45: ‘readonly’ option is set (add ! to override)

按提示在命令结尾加一个叹号,然后再次执行,还是出错:

:w!
“/etc/profile” E212: Can’t open file for writing

用以下命令可以解决。此时,Vim会有两次交互,
一,输入密码:

:w ! sudo tee % > /dev/null
[sudo] password for user:

二,警告文件已被修改了,并显示出一个选项菜单。
这里按 L键重新将该文件载入缓冲区。

Press ENTER or type command to continue
W12: Warning: File “/etc/profile” has changed and the buffer was changed in Vim as well
See “:help W12” for more info.
[O]K, (L)oad File:

该条命令如何工作:
查阅vim 的文档(输入:help :w),会提到 :write !{cmd}。

:[range]w[rite] [++opt] !{cmd}
Execute {cmd} with [range] lines as standard input
(note the space in front of the ‘!’). {cmd} is
executed like with “:!{cmd}”, any ‘!’ is replaced with
the previous command :!.

该命令会把缓冲区的内容作为标准输入传给指定的{cmd}, {cmd} 可以是任何外部的命令或程序。這裡調用了外部命令tee以sudo 权限运行保存。命令中符号 % 是vim 当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径,这里就会展开为当前文件的完整路径/etc/profile. 然后缓冲区的内容将当做标准输入,覆盖该编辑文件的内容。vim 检测到该文件被一个外部程序修改,就会跳出提示选择。然而这里的文件和缓冲区的内容是一致的。

这条命令怪模怪样,却经常用到。记在这里,加深理解,也有助于记住此命令。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用vi修改文件,保存文件时,提示“readonly option is set”的解决方法。

来源:http://superuser.com/questions/300500/ubuntu-unable-to-edit-bashrc-file-because-of-readonly Th...
  • Longerandlonger
  • Longerandlonger
  • 2012年02月16日 22:19
  • 61684

vim下编辑readonly文件解决方案

(原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任) 原始出处:http://liuyu.blog.51cto.com/183345/30397...
  • Lmikic
  • Lmikic
  • 2015年08月17日 17:29
  • 7543

linux vi 打开文件始终显示readonly

因为其中包含非asc的字符,被vi认为二进制文件,所以始终用readonly模式打开 vi后输入 :set noreadonly 就可以解决了...
  • yudingding6197
  • yudingding6197
  • 2015年08月11日 10:56
  • 3046

vim 修改文件出现错误“E45: 'readonly' option is set (add ! to override)”

vim 修改文件出现错误“E45: 'readonly' option is set (add ! to override)”
  • u010947098
  • u010947098
  • 2016年12月28日 14:58
  • 3401

vim下编辑readonly文件解决方案

(原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任) 原始出处:http://liuyu.blog.51cto.com/183345/30397...
  • Lmikic
  • Lmikic
  • 2015年08月17日 17:29
  • 7543

mac 终端常用命令和vim普通命令使用

mac 终端 常用命令 基本命令 1、列出文件 ls 参数 目录名        例: 看看驱动目录下有什么:ls /System/Library/Extensions 参数 -w...
  • y2888886
  • y2888886
  • 2016年01月06日 13:11
  • 14594

Vim 中截取部分内容保存到其他文件

Vim 中截取部分内容保存到其他文件。      按 Escape进入命令模式,然后输入 :start,endw file,其中的 start 是当前文件中要保存的第一行,end 是要保存的最后...
  • lcj_cjfykx
  • lcj_cjfykx
  • 2014年01月27日 02:36
  • 3446

如何在vim保存时获得sudo权限

使用  :w !sudo tee % 命令:w !{cmd},让 vim 执行一个外部命令{cmd},然后把当前缓冲区的内容从 stdin 传入。 tee 是一个把 stdin 保存到文件的小...
  • u012906135
  • u012906135
  • 2016年09月08日 14:51
  • 790

以普通用户启动的Vim如何保存需要root权限的文件

source: http://feihu.me/blog/2014/vim-write-read-only-file/ 以普通用户启动的Vim如何保存需要root权限的文件 ...
  • BalterNotz
  • BalterNotz
  • 2016年11月08日 15:55
  • 249

vim 保存没有权限的文件

使用vim编辑文件非常方便,vim也是修改系统配置最常用的工具。但有时我们会顾着方便而忘了自己有没有权限编辑文件。 往往会在写完文件内容保存时才发现自己没有权限。怎么办?     将文件使用:w 的方...
  • zhangna20151015
  • zhangna20151015
  • 2016年10月26日 13:45
  • 235
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Vim]以sudo权限来保存vim打开的readonly文件
举报原因:
原因补充:

(最多只允许输入30个字)