对于新手问题表示抱歉。我想知道 vim 如何管理只读文件。我对文本文件有555权限。但是,当我打开它并写入一些东西然后 :w! ,我所做的更改被保存了。我好奇 vim 是如何在后台处理这个任务的!!难道它是先将权限暂时更改为755,然后再恢复权限并写入吗?请给我解答。
对于新手问题表示抱歉。我想知道 vim 如何管理只读文件。我对文本文件有555权限。但是,当我打开它并写入一些东西然后 :w! ,我所做的更改被保存了。我好奇 vim 是如何在后台处理这个任务的!!难道它是先将权限暂时更改为755,然后再恢复权限并写入吗?请给我解答。
编辑:我最初回答了关于UNIX权限如何工作的正确但最终与Vim无关的信息:那不是Vim在做什么。
确实,你是对的:当你输入:w!
并且你在UNIX上时,如果需要,Vim将添加写入权限:
/* When using ":w!" and the file was read-only: make it writable */
if (forceit && perm >= 0 && !(perm & 0200) && st_old.st_uid == getuid()
&& vim_strchr(p_cpo, CPO_FWRITE) == NULL)
{
perm |= 0200;
(void)mch_setperm(fname, perm);
made_writable = TRUE;
}
然后将其重置回去:
if (made_writable)
perm &= ~0200; /* reset 'w' bit for security reasons */
这也反映在帮助文件中:
注意: 这可能会更改文件的权限和所有权,并破坏(符号)链接。将“cpoptions”中的“W”标志添加到避免此问题。