Answers:
:w !sudo tee %
我经常忘记在编辑没有写权限的文件之前使用sudo。当我来保存该文件并获得权限错误时,我只是发出该vim命令即可保存该文件,而无需将其保存到临时文件中,然后再次将其复制回去。
请不要为此拒绝我。我不建议实现此答案,但这是rkthkr要求的答案。
rkthkr说:
但是重新启动vim并以root身份运行会很好。
做到这一点的方法是用:!sudo vim %
正如我提到的ipozgaj,百分比作为参数(甚至一分论点)获取与路径当前缓冲区替换。(您可能会提示您输入密码。)你有一个新的Vim进程,root所有,也就是原来的Vim进程的子进程结束。听起来很傻,对不对?这是ps中的样子:
~# ps afo pid,ppid,user,stat,comm
PID PPID USER STAT COMMAND
16187 30478 rbronosky Ss bash
16510 16187 rbronosky R+ \_ ps
30482 30478 rbronosky Ss bash
16244 30482 rbronosky S+ \_ vim
16318 16244 root S+ \_ vim
如果您对包含该文件的目录具有写权限,并且已对其进行了编辑,则可能会警告您退出交换文件。选择[R] ecover,将反映父vim进程所做的大部分更改。(*我认为交换更新可能是定时的或有增量阈值。我已经在交换中投入了太多时间,因此不愿意研究它。)当您退出vim时,不要惊慌。仍然在vim中...您打开了第二个vim进程。记得?
现在,尽管如此,我几乎永远不会这样做。也许,如果我没有足够的咖啡或太多的咖啡,并且我意识到我将需要以超级用户身份编辑更多文件...我可以尝试一下。在14年的管理系统中,我从未有过。但是,直到您对我的首选解决方案(完全与dbr提供的解决方案)表示不满之前,我从未想过。
:w !sudo tee %
因此我认为这是一个不错的答案。
我通常将其保存到$ HOME / tmp / apache.conf中的临时文件中(例如),然后
sudo vimdiff $HOME/tmp/apache.conf /etc/apache2/apache.conf
这是合并更改的一些额外工作,但很成功。我发现这是在便利和针对不必要的更改进行衡量之间的好方法
在此之前,我曾考虑过ACL或为文件分配相应的组,但是这种方法并不能解决所有问题,或者我经常忘记更改所有权或在不打算这样做的情况下更改文件。
仅适用于目前尚未管理的文件。我们使用的整体解决方案是带有git repo的木偶程序,人们可以在其中本地编辑文件并在适当的服务器上测试更改,如果配置可以按需运行,则更改将被推回到中央存储库,在该存储库中,我们的配置引擎会定期提取更改。