[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...

vim下编辑readonly文件解决方案

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

【Linux】解决用vi修改文件,保存文件时,提示“readonly option is set”

vi /etc/my.cnf  保存修改时出现 “readonly option is set” 改用 sudo vi /etc/my.cnf 保存即可

当你打开vim没有sudo 又想保存时......

使用这个命令: :w !sudo tee %

MAC OS X JAVA开发环境配置简述 增加mysql安装简述 附myeclipse10 for mac 破解版下载

破解版下载请参考Myeclipse 10 for mac 安装过程及myeclipse 10 for mac 破解版下载 刚整的pro所以研究半天把开发环境搭建好 1 首先jdk1.7: 转...

用只读模式打开文件

有时,你只是想查看一个文件,而没打算修改它。有一个风险是你想都没想就输入了一个 "w" 命令。要避免这个问题,以只读模式编辑这个文件。 要用只读模式启动 Vim,可以使用这个命令: vim -R fi...

轻松学会源码编译Vim 8.0

1、首先,安装包括 Git 在内的所有必备的库。 对于一个 Debian 类的 Linux 发行版,例如 Ubuntu,命令如下: sudo apt-get install libncurses5...

[vim 小技巧] 在vim里保存只读文件

使用如下插件: https://github.com/alanstevens/KickAssVim/blob/master/config/sudoW.vim

如何在VIM中保存编辑的只读文件

你是否会和我一样经常碰到这样的情景:在VIM中编辑了一个系统配置文件,当需要保存时才发现当前的用户对该文件没有写入的权限。如果已 经做了很多修改,放弃保存的确很懊恼,只好先保存在用户的主目录下,再用...

Nodejs快速入门

Node.js快速入门 1、Node.js安装与配置 1.1 Node.js安装 (1)源码编译安装 下载最新版源码:https://nodejs.org/dist/v6.9.5/node-v...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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