`:w !sudo tee %` 是如何工作的

`:w !sudo tee %` 是如何工作的

如果您在 vim 中打开一个无权写入的文件,然后决定需要更改它,您可以在不退出 vim 的情况下写入更改,方法是:w !sudo tee %
我不明白这是如何工作的。你能剖析一下这个吗?
我理解这:w部分,它将当前缓冲区写入磁盘,假设已经有一个与之关联的文件名,对吗?
我也理解!执行sudo tee命令并%代表当前缓冲区内容,对吗?
但还是不明白这是如何工作的。

答案1

结构:w !cmd意思是“写入当前缓冲区管道式的例如,您可以这样做,:w !cat它将通过管道传输缓冲区cat

现在%文件名与缓冲区关联

因此:w !sudo tee %将通过管道传输缓冲区的内容sudo tee FILENAME。这有效地将缓冲区的内容写入文件。

答案2

%代表当前缓冲区的文件名,而不是其内容。

so:w !sudo tee %表示将当前缓冲区通过管道传输到sudo tee [currentfilename].

tee正在以 root 身份运行,因此具有写入权限以将其标准输入保存到文件中。

也可以看看https://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work

答案3

不太对劲!

!command运行命令作为筛选命令,它从 获取文本stdin,执行某些操作并输出到stdout

通过使用w,您将文件内容推送到stdinof sudo tee %%是vim中的特殊寄存器,保存当前文件的名称。

所以你得到了sudo tee FILENAME,它将把tee stdin文件内容推送到当前文件。

相关内容