[read-only]
警告(例如,一些随机的/etc
配置文件,例如/etc/resolv.conf
) )。:w!
在这种情况下显然失败,因为我的用户无论如何都没有写许可。因此,我必须:w /home/filename
,exit和sudo mv ...
,非常不舒服。是否有办法暂时升级到root才能保存当前打开的
文件? (如果我在
sudoers
中或/并且我可以直接在su
中)?#1 楼
诀窍是使用对sudo
的外部调用::w !sudo tee %
工作原理:
:w !<command>
执行<command>
将stdin复制到文件&stdout; tee
扩展为当前文件名。.您以
%
前缀作为根权限。覆盖您正在编辑的文件的内容。这就是为什么您会从Vim收到警告的原因:W12: Warning: File "xxx" has changed and the buffer was changed in Vim as well
See ":help W12" for more info.
[O]K, (L)oad File:
您可以将其转换为函数:
fun! SuperWrite()
write !sudo tee %
" Or with :silent (but that doesn't seem to work for everyone)
"silent write !sudo tee %
edit!
endfun
和keybind:
nnoremap <Leader>w! :call SuperWrite()<CR>
通过
sudo
,只有root用户才能使用su
立即执行命令。我认为您无法使用-c
来执行此操作,但是也许我没有意识到一个窍门... #2 楼
我在.vimrc文件中使用了以下映射,这些映射对我很有用: “”和“w
”是“超强力写入”。 :P 评论
我早已将其映射到W,但是w!更有意义,应更新我的.vimrc。谢谢
–贾兰布
2015年2月6日下午0:17
评论
SuperWrite可以运行,但是会回显您的文件。运行它:静默地输入密码。
–TankorSmash
2015年2月23日在23:38
@TankorSmash谢谢;更新的答案。但是,不确定“隐式输入密码”是什么意思?添加静音似乎可以正常工作?
–马丁·图尔诺伊(Martin Tournoij)
2015年2月23日在23:41
我没有用sudo运行vim,所以可能在这里发挥作用,但是当我去sudo tee文件时,它提示我输入sudo密码。如果静音,则看不到提示,但仍需要输入密码。
–TankorSmash
15年2月24日在4:52
您将看到tee的标准功能,即回显到stdout以及给定的文件。一种解决方案是将stdout重定向到/ dev / null,例如:w! tee%> / dev / null这仍将回显命令的结果(单行),而不是整个缓冲区的内容。
–乔恩·卡特(Jon Carter)
2015年2月24日在7:01
如果您不希望打印文件,则不使用tee然后丢弃其输出,猫也不会工作吗?
– Lie Ryan
15年2月26日在11:08