只允许一个文件名出错

Hus*_*oli 6 vim sudo

有时我会忘记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. 我不明白这个错误。

Jan*_*ary 7

因为: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}