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

Ali*_*Ali 30 vim sudo tee

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

Ste*_*ris 36

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

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

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


cas*_*cas 8

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

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

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

另见/sf/ask/182054841/