1. 程式人生 > >Vim打開和保存文件-Vim使用技巧(7)

Vim打開和保存文件-Vim使用技巧(7)

.cn 中間 緩沖區 修飾符 標準 nbsp mkdir -p 技巧 inux

使用Vim打開和保存文件是最常用的操作,介紹使用edit命令通過文件路徑來打開文件,使用write命令保存文件,當文件路徑不存在或用戶權限不匹配時,使用write命令調用外部shell程序完成操作。

1. edit命令打開文件

Vim命令 :edit (縮寫形式為 :e) 可以通過文件的絕對路徑或相對路徑來打開文件。

如果想打開的文件和當前活動文件緩沖區中的文件在同一個目錄裏,可以使用 :edit %:h<Tab>命令。

% 符號代表活動緩沖區的完整文件路徑:h 修飾符會去除路徑中的文件名,但保留路徑中的其他部分。因此,輸入的 %:h<Tab> 會被展開為當前文件所在目錄

的路徑。

Vim命令 %:h 在命令行模式下具有特殊含義,可用於高效操作與Vim文件路徑相關的功能。

2. 把文件保存到不存在的目錄

如果使用 :edit {file} 命令指定了一個不存在的文件路徑,Vim 會創建一個新的空白緩沖區。在新建的空白緩沖區中按 <Ctrl-g> 時可以看到該緩沖區被標識為新文件。然後,當執行 :write (縮寫形式為 :w) 命令保存該緩沖區時,Vim 會嘗試將此緩沖區的內容寫到創建該緩沖區時所指定的文件路徑中。

如果指定的文件路徑不存在時,Vim會因為找不到對應目錄而顯示出錯信息 “無法打開並寫入文件”。

此時,一個常用的Vim使用技巧是調用外部的 mkdir 程序新建目錄。在Vim命令行模式下執行 :!mkdir -p %:h

命令後可以執行 :write 命令保存新建的文件。

:!mkdir 表示調用外部的 mkdir 命令,-p 參數使 mkdir 創建任何不存在的中間目錄,而 %:h 表示當前活動緩沖區對應文件所在目錄

<Ctrl-g> 命令用於顯示當前文件的文件名及狀態,

3. 以超級用戶權限保存文件

在使用Vim工作時,有時會遇到需要以root身份保存文件的場景。

例如,假設當前用戶為 vim,打開 /etc/hosts 文件查看當前host配置後需要新增一個域名解析 vim.ink 127.0.0.1

首先,使用 Go 命令在hosts文件末尾新建內容後,使用 :write 命令嘗試保存結果,此時Vim會報錯 “E45:已設定選項 ‘readonly’ (請加 ! 強制執行)”。按照提示,使用命令 :write!

強制執行write命令時,Vim仍然報錯 “ E212: 無法打開並寫入文件”。

這說明現在的問題是當前用戶沒有寫 /etc/hosts 文件的權限。

為了不退出Vim而保留已有修改,可以使用Vim命令 :write !sudo tee % > /dev/null,然後按Vim的提示輸入vim用戶的密碼並按 L 鍵重新將該文件加載到緩沖區即可。

這條命令是如何工作的?

首先,:write !{cmd} 命令會把當前文件緩沖區的內容作為標準輸入傳給指定的{cmd},{cmd} 可以是任何外部程序 (vim命令行模式下執行命令 :h :write_c 可查看更多內容)。

其次,在 Vim 命令行中,% 符號會展開成當前文件的完整路徑,因此上面的命令可以展開為 :write !sudo tee /etc/hosts > /dev/null

所以,上面這條命令會把當前文件緩沖區的內容當作標準輸入傳遞給linux的 tee 命令,以超級用戶權限運行 tee 命令重定向到文件 /etc/hosts 中,從而實現了不重啟Vim而以超級用戶權限保存文件的需求。

技術分享圖片

:linux命令tee表示將內容重定向到指定的文件並重定向內容副本到標準輸出。

Vim打開和保存文件-Vim使用技巧(7)