有时我会忘记sudo vim打开我没有写权限的文件。我看到了这个帖子,它真的很有帮助。
当我这样做时,:w !sudo tee %它要求我输入密码,然后是选项(O)K和(L)OAD. 这工作得很好。但是当我这样做时:wq !sudo tee %,vim给了我一个错误-
E172: Only one file name allowed
Run Code Online (Sandbox Code Playgroud)
为什么它不让我在wq. 我不明白这个错误。
因为:w和:wq是具有不同选项的两个不同命令。
这是:w带有!{cmd}选项的命令的描述:
:[range]w[rite] [++opt] !{cmd}
Execute {cmd} with [range] lines as standard input
(note the space in front of the '!'). {cmd} is
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.
Run Code Online (Sandbox Code Playgroud)
请注意,:w!和:w !{cmd}是两个完全不同的东西;在前者中,感叹号的意思是“强制写入”,在后者中,它是一种管道符号,可以将整个文本范围传递给后续命令(在您的情况下,以tee超级用户身份运行,两者都将文件返回到vi 并将其保存到由通配符表示的文件名%)。
可悲的是,命令没有这样的选项:wq。此命令唯一可用的其他形式是:wq!(此处感叹号不是用于管道到另一个命令,而是用于强制退出,很像:w!)和:w[!] {file}。