1. 程式人生 > >學習vim命令:“:w !sudo tee %”

學習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當中一個只讀暫存器的名字,總儲存著當前編輯檔案的檔案路徑。

每天一小步,人生一大步!Good luck~