有时我会忘记执行此操作sudo vim
并打开我没有写入权限的文件。我看到这个帖子这真的很有帮助。
当我:w !sudo tee %
这样做时,它要求我输入密码,然后是选项(O)K
和(L)OAD
。这很好用。但是当我这样做时:wq !sudo tee %
,vim
给了我一个错误 -
E172: Only one file name allowed
为什么它不让我进入之后的提示wq
。我不明白这个错误。
答案1
因为: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 |:!|.
请注意,:w!
和:w !{cmd}
是两个完全不同的东西;在前者中,感叹号表示“强制写入”,在后者中,它是一种管道符号,用于将整个文本范围传递给后续命令(在您的情况下,以tee
超级用户身份运行,这两者都将文件返回到vi 并将其保存到由通配符表示的文件名%
)。
遗憾的是,该命令没有这样的选项:wq
。该命令唯一可用的其他形式是:wq!
(这里感叹号不是用于管道到另一个命令,而是用于强制退出,非常类似于:w!
)和:w[!] {file}
。