[Vim]以sudo許可權來儲存vim開啟的readonly檔案

來源:互聯網
上載者:User
[Vim]以sudo許可權來儲存vim開啟的readonly檔案

本文要說的命令如下:

:w ! sudo tee % > /dev/null

在做 linux 配置的時候,會改到只讀的檔案,比如 /etc/profile

$ ls -al /etc/profile
-rw-r–r– 1 root root 1139 Mar 14 17:30 /etc/profile

用 vim 打開該只檔案 /etc/profile 修改後,儲存會出錯:

:w
E45: ‘readonly’ option is set (add ! to override)

按提示在命令結尾加一個歎號,然後再次執行,還是出錯:

:w!
“/etc/profile” E212: Can’t open file for writing

用以下命令可以解決。此時,Vim會有兩次互動,
一,輸入密碼:

:w ! sudo tee % > /dev/null
[sudo] password for user:

二,警告檔案已被修改了,並顯示出一個選項菜單。
這裡按 L鍵重新將該檔案載入緩衝區。

Press ENTER or type command to continue
W12: Warning: File “/etc/profile” has changed and the buffer was changed in Vim as well
See “:help W12” for more info.
[O]K, (L)oad File:

該條命令如何工作:
查閱vim 的文檔(輸入:help :w),會提到 :write !{cmd}。

:[range]w[rite] [++opt] !{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 :!.

該命令會把緩衝區的內容作為標準輸入傳給指定的{cmd}, {cmd} 可以是任何外部的命令或程式。這裡調用了外部命令tee以sudo 許可權運行儲存。命令中符號 % 是vim 當中一個唯讀寄存器的名字,總儲存著當前編輯檔案的檔案路徑,這裡就會展開為當前檔案的完整路徑/etc/profile. 然後緩衝區的內容將當做標準輸入,覆蓋該編輯檔案的內容。vim 檢測到該檔案被一個外部程式修改,就會跳出提示選擇。然而這裡的檔案和緩衝區的內容是一致的。

這條命令怪模怪樣,卻經常用到。記在這裡,加深理解,也有助於記住此命令。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.