Answers:
诀窍是使用外部调用sudo
:
:w !sudo tee %
工作原理:
:w !<command>
执行<command>
与缓冲作为标准输入的内容。tee
将stdin复制到文件&stdout; %
扩展为当前文件名。sudo
获取root权限。您并不是真正用Vim保存文件,而是调用一个外部程序来覆盖正在编辑的文件的内容。这就是为什么您会收到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>
使用su
,只有root用户可以使用-c
立即执行命令。我认为您无法使用su
此功能,但是也许我没有意识到一个窍门...
silent
似乎工作正常?
w ! tee % > /dev/null
这仍然会回显命令的结果(单行),而不是整个缓冲区的内容。
tee
,则不使用它然后丢弃它的输出,cat
也行不通吗?
SuperWrite
可以,但是它将文件回显给您。运行:silent
ly会无形地输入密码。