通常在编辑配置文件时,我会用vi打开一个,然后当我保存它时,我意识到我没有输入

sudo vi filename

有没有办法给vi sudo特权来保存文件?我好像记得之前在查vi的时候看到过这个,但是现在找不到了。


当前回答

一般来说,你不能改变vi进程的有效用户id,但是你可以这样做:

:w !sudo tee myfile

其他回答

我在~/.bashrc中有这个:

alias svim='sudo vim'

现在,每当我需要编辑配置文件时,我只需用svim打开它。

一个快速谷歌似乎给出了这样的建议:

如果它是只读的,不要尝试编辑。 您可以更改文件的权限。(它是否能让你省钱取决于试验。) 如果你仍然编辑,保存到一个临时文件,然后移动它。

http://ubuntuforums.org/showthread.php?t=782136

Ryan的建议通常是好的,但是,如果遵循步骤3,不要移动临时文件;它将拥有错误的所有权和权限。相反,sudoedit正确的文件并读入临时文件的内容(使用:r或类似的方法)。

如果执行步骤2,请使用:w!强制写入文件。

%被替换为当前文件名,因此你可以使用:

:w !sudo tee %

(vim将检测到文件已被更改,并询问您是否希望重新加载该文件。选择[L]而不是OK,说yes。)

作为快捷方式,您可以定义自己的命令。在你的.vimrc中放入以下文件:

command W w !sudo tee % >/dev/null

在上面你可以输入:W<输入>保存文件。自从我写了这篇文章,我找到了一个更好的方法来做到这一点:

cmap w!! w !sudo tee >/dev/null %

这样你就可以输入:w!!它将展开到完整的命令行,将光标留在末尾,因此如果您愿意,可以用您自己的文件名替换%。

这是另一个在回答这个问题后出现的插件,一个名为SudoEdit的插件,它提供SudoRead和SudoWrite函数,默认情况下将首先尝试使用sudo,如果失败则尝试使用su: http://www.vim.org/scripts/script.php?script_id=2709