學習vim命令:“:w !sudo tee %”
Original URL:
http://www.haw-haw.org/node/1501
原文來自於
commandlinefu
原文是這樣解釋這個命令的:
在vim中保存正在編輯的文件而不需要必要的權限。
(Save a file you edited in vim without the needed permissions)
下面我們就分析下這條命令是怎樣做到保存文件而不需要必要的權限的
:w !sudo tee %
man vim就會發現
百分號(“%”)代表當前文件名
根據man vim的提示:
:[range]w[rite] !{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 !sudo tee %”這條命令的含義是把當前編輯的文件的內容當做標准輸入輸入到命令sudo tee 文件名里去
也就是sudo保存為當前文件名
這個功能其實可能debian和ubuntu的用戶更需要一些
因為我們都是直接root
常常忘記了sudo就直接用vim編輯/etc內的文件,(不過也不一定,vim發現保存的文件無法保存時候會提示)等編輯好了,保存時候才發
現沒權限。曲線方法是先保存個臨時文件,退出后再sudo cp回去。不過實際上在vim里面可以直接完成這個過程的,命令就是如此。
查閱vim的文檔(輸入:help :w),會提到命令:w!{cmd},讓vim執行一個外部命令{cmd},然后把當前緩沖區的內容從stdin傳入。
tee是一個把stdin保存到文件的小工具。
而%,是vim當中一個只讀寄存器的名字,總保存着當前編輯文件的文件路徑。