:w – 保存 buffer
w的作用是保存当前文件缓存到指定的文件,要深刻理解这句话
查看 vim 帮助:help :w
w for write, Write the whole buffer to the current file.
:w
= :w current_file
,单独使用时,作用为将文件buffer保存在当前文件中
:w another_file
, 将文件buffer保存到另一个文件中,当前文件不改变,效果就是另存为
:w ![cmd]
, 将文件buffer作为输入交给 shell 命令处理
sudo – 使用管理员权限执行命令
sudo
的作用是用来获取管理员权限
因为当前用户没有写权限,所以单独用:w
是不能保存文件的
只有通过 sudo 提升权限,再执行tee命令才能将当前缓存保存到原文件名下
tee – 管道分支
tee
意为 T 字形的
tee
的作用是管道分支,比如echo "hello" | tee file.txt
,作用是将”hello”这段标准输入,保存到file.txt同时打印到标准输出(屏幕)中
又如ls -l | tee file.txt | less
命令,tee
将上一个命令的输出一方面写入file.txt中,另一方面继续传递给less命令
% – 当前文件路径寄存器
%
是 vim 的一个 read only 寄存器,它储存着当前文件的绝对路径
可以在 vim 命令模式下这么测试一下 – 输出当前文件名
:!echo %
退出 vim 会看到 terminal 会打印出当前文件的路径
强制保存后的警告
执行完这个:w !sudo tee %
命令,内容就强制保存了,但是会出一个警告
W12: Warning: File "/etc/hosts" has changed and the buffer was changed in Vim as well
See ":help W12" for more info.
[O]K, (L)oad File:
这是因为正在编辑的文件已经在别处被修改了,vim 询问是否要重载新文件进来,按L重载即可