(linux)Vim存檔無root權限,不用離開Vim的臨時解決方法

Vim存檔無root權限,不用離開Vim的臨時解決方法(:w !sudo tee %)

由於安全性等因素,一般不建議直接使用root帳號登入Linux系統,而是使用一般使用者帳號登入。

然而,在使用Vim編輯檔案時,有時會忘記先使用susudo指令取得root權限,

導致在儲存檔案時出現readonly的提示,才發現權限不足。

這種情況下,如果直接退出Vim,之前的編輯工作就都白費了。

解決方法一

一種常見的解決方法是,先將編輯好的檔案儲存在一個暫存檔中。

在離開Vim後,使用root權限將暫存檔複製到目標位置,然後再刪除暫存檔。

或者,也可以直接將暫存檔mv覆蓋原本要編輯的檔案。

這樣就能確保編輯的內容得以保存,同時也避免了權限不足的問題。

解決方法二

上面的方法雖然可行,但步驟上還是比較麻煩。

另一個比較方便的方式,是直接在Vim中,用下面指令取得root權限來寫入檔案:

1
:w !sudo tee %

輸入此指令後,會需要輸入密碼以取得root權限。

此指令是經外部的shell寫入文件,所以Vim會發現檔案已被更動,會出現下面提示:

1
2
3
W12: Warning: File "/xxx/xxxx" has changed and the buffer was changed in Vim as well
See ":help W12" for more info.
[O]K, (L)oad File:

按下L重新載入新的內容即可。

:w !sudo tee %指令功能拆解說明

  • :w:標準Vim寫入指令,但在此是將Vim內容寫入一個緩衝區
  • !:執行外部命令(shell)
  • sudo:呼叫sudo指令,取得root權限
  • tee:將stdin(Vim 寫入緩衝區的資料)導向至stdout以及檔案
  • %:百分比符號就是Vim的暫存器,代表目前編輯檔案的路徑名稱