vim 用 :w !sudo tee % 进行保存的终极奥义
经常使用vim忘记了不是root , 而提示没有写入权限的情况,所以查询一下,相关命令是:
:w !sudo tee %
那么这条命令是如何理解的呢?
首先 ,vim 写入文件是
:w [文件名]
这里的文件名也可以是设备,比如 /dev/stdin /dev/stdout
我们没有权限,先把内容写到 `/dev/stdin` ,
其次 理解tee的含义,就是把从 stdin 读取的内容重定向到某一个文件,类似于 `>>` 符号,但 你无法使用 `sudo >>` ,所以 tee 是 >或 >> 的一个替代命令, >和>> 或者< 和<< 根本不是命令,
所以 sudo tee [文件名],就是从标准stdin 来写入到[文件名]。
在vim 命令模式下, `%` 就是 当前的文件名,是一个当前文件名的快速替换品,或者说是环境变量也可以。
`sudo tee %` 就是 把内容写入到当前文件。
所以 合并两面两点,vim 先写入到 一个能返回 stdin 的命令,这个命令就是 sudo tee % , 为了调用这个命令,前面加一个感叹号
如果换成shell,其实上面的命令就是
echo ${文件_Buff} | sudo tee ${文件名}
这样就能解释并记住这个命令了:
:w !sudo tee %
理解tee的含义,就是把从 stdin 读取的内容重定向到某一个文件,类似于 `>>` 符号,但 你无法使用 `sudo >>` ,所以 tee 是 >或 >> 的一个替代命令, >和>> 或者< 和<< 根本不是命令,
------------------------------------------------------------------------------------------------
一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。