markdown-it
demo
Delete
Submit
clear
permalink
### autocmd 在 Vim 編輯器中,`autocmd` 是「自動命令」(Auto Command)的縮寫。它是一種功能強大的設定方式,用於在特定事件發生時自動執行一系列的 Vim 命令。這些事件可以包括打開文件、保存文件、進入特定模式等等。`autocmd` 讓用戶能夠根據自己的需要,在不同情況下自動執行特定的操作。 舉個例子來說,假設你希望每次打開一個 Python 文件時,自動進入「插入模式」並設定縮進,你可以使用 `autocmd` 來實現這個需求。以下是一個示例的 `autocmd` 設定: ``` autocmd FileType python autocmd BufEnter *.py startinsert | set expandtab tabstop=4 shiftwidth=4 ``` 這行 Vim 腳本是用來設定當進入 Python 文件(`.py` 擴展名)時的自動行為。讓我們逐行解釋這個腳本: 1. `autocmd`: 這是 Vim 中的自動命令開始的部分,表示接下來是一個自動命令的定義。 2. `FileType python`: 這是自動命令的觸發事件,它表示當文件的類型被識別為 Python 時,該自動命令將被觸發。這種類型的識別是通過 Vim 識別文件類型的機制實現的。 3. `autocmd BufEnter *.py`: 在文件類型識別為 Python 的情況下,這部分指定了另一個觸發事件,即在切換到擴展名為 `.py` 的文件時觸發。 4. `startinsert`: 這是在觸發事件時要執行的第一個操作。`startinsert` 命令會進入「插入模式」,這意味著當你切換到 Python 文件時,Vim 會自動進入編輯模式,方便你開始編輯內容。 5. `|`: 這個符號表示在一個命令結束後執行另一個命令。在這個腳本中,它將 `startinsert` 命令和後面的命令分隔開。 6. `set expandtab tabstop=4 shiftwidth=4`: 這部分是第二個在觸發事件時執行的操作。這裡使用 `set` 命令設定了幾個編輯器選項:`expandtab` 設置為展開為空格,`tabstop` 設置為 4 個空格寬度,`shiftwidth` 設置為 4 個空格寬度。這些設置將確保在編輯 Python 文件時,Tab 鍵會被展開為 4 個空格,並且縮進也是 4 個空格。 ``` " 自定義函式,用於處理 Python 檔案 function! ProcessPythonFile() " 這裡可以寫你希望在處理 Python 檔案時執行的任何操作 echo "Processing Python file..." " 更多操作... endfunction " 自動命令:當文件類型為 python 時呼叫自定義函式 autocmd FileType python call ProcessPythonFile() ``` ### 常用的「自動命令事件」 以下是一些常用的 Vim 自動命令事件,它們可以幫助你根據不同的情況自動執行命令: 1. **BufRead**: 當從磁盤讀取文件內容到緩衝區時觸發,通常在打開文件時使用。 2. **BufReadPre**: 在讀取文件內容到緩衝區之前觸發,可以在讀取前進行一些處理。 3. **BufWrite**: 當將緩衝區中的內容寫入到磁盤文件時觸發,通常在保存文件時使用。 4. **BufWritePre**: 在寫入文件內容到磁盤之前觸發,可以在寫入前進行一些處理。 5. **FileType**: 當文件類型被識別時觸發,通常在打開文件或切換到不同文件時使用。 6. **CursorMoved**: 當游標移動到不同位置時觸發,可以用於更新狀態欄或其他相關操作。 7. **InsertEnter**: 當進入插入模式時觸發,可以在進入插入模式時執行一些操作。 8. **InsertLeave**: 當退出插入模式時觸發,可以在退出插入模式時執行一些操作。 9. **VimEnter**: 當 Vim 完全啟動並載入配置時觸發,可以在 Vim 啟動後執行初始化操作。 10. **ColorScheme**: 當更改顏色方案時觸發,可以在更改主題時進行相關的配置調整。 11. **WinEnter**: 當進入窗口(分割屏幕)時觸發,可以在切換到窗口時執行一些操作。 12. **WinLeave**: 當退出窗口(分割屏幕)時觸發,可以在離開窗口時執行一些操作。 13. **BufEnter**: 當切換到緩衝區(文件)時觸發,可以在切換文件時執行一些操作。 14. **BufLeave**: 當離開緩衝區(文件)時觸發,可以在離開文件時執行一些操作。 若 file.txt 存有需要開啟的檔案 ``` path/to/file1.txt path/to/file2.txt ``` 開啟這些檔案並加入 buffer ``` vim $(cat file.txt) ```
html
source
debug
Fork me on GitHub