Nvim 的 :help
頁面,從 原始碼 使用 tree-sitter-vimdoc 解析器 產生。
mkdir -p ~/.config/nvim/ftplugin
set runtimepath?
setlocal softtabstop=4 noremap <buffer> <LocalLeader>c o/**************<CR><CR>/<Esc> let b:undo_ftplugin = "setl softtabstop< | unmap <buffer> <LocalLeader>c"嘗試編輯 C 檔案。您應該會注意到 'softtabstop' 選項已設定為 4。但是當您編輯另一個檔案時,它會重設為預設值 0。那是因為使用了「:setlocal」命令。這只會將 'softtabstop' 選項設定為緩衝區的本地設定。一旦您編輯另一個緩衝區,它將會設定為該緩衝區的值。對於新的緩衝區,它將會取得預設值或上次「:set」命令的值。
<buffer>
」命令會建立一個本地於目前緩衝區的對應。這適用於任何對應命令:「:map!」、「:vmap」等。<LocalLeader> 在對應中會被替換為「maplocalleader」變數的值。$VIMRUNTIME/ftplugin/關於編寫檔案類型外掛程式的更多詳細資訊可以在這裡找到:write-plugin。
augroup filetypedetect au BufNewFile,BufRead *.xyz setf xyz augroup END這會將所有以「.xyz」結尾的檔案辨識為「xyz」檔案類型。「:augroup」命令將此自動命令放入「filetypedetect」群組。這允許在執行「:filetype off」時移除所有用於檔案類型偵測的自動命令。「setf」命令會將 'filetype' 選項設定為其引數,除非它已經被設定。這將確保 'filetype' 不會被設定兩次。
augroup filetypedetect au BufNewFile,BufRead *.xyz setf xyz au BufNewFile,BufRead /usr/share/scripts/* setf ruby augroup END但是,如果您現在編輯檔案 /usr/share/scripts/README.txt,這不是 ruby 檔案。以「*」結尾的模式的危險在於它很快會比對到太多檔案。為了避免這個問題,請將 filetype.vim 檔案放在另一個目錄中,該目錄位於 'runtimepath' 的末尾。例如,對於 Unix,您可以使用「~/.config/nvim/after/filetype.vim」。您現在將文字檔案的偵測放在 ~/.config/nvim/filetype.vim 中
augroup filetypedetect au BufNewFile,BufRead *.txt setf text augroup END該檔案首先在 'runtimepath' 中找到。然後在 ~/.config/nvim/after/filetype.vim 中使用它,該檔案最後找到
augroup filetypedetect au BufNewFile,BufRead /usr/share/scripts/* setf ruby augroup END現在將會發生的事情是,Vim 會在 'runtimepath' 中的每個目錄中搜尋「filetype.vim」檔案。首先找到 ~/.config/nvim/filetype.vim。在那裡定義了捕捉
*.txt
檔案的自動命令。然後 Vim 在 $VIMRUNTIME 中找到 filetype.vim 檔案,它位於 'runtimepath' 的中間。最後找到 ~/.config/nvim/after/filetype.vim,並新增了偵測 /usr/share/scripts 中的 ruby 檔案的自動命令。當您現在編輯 /usr/share/scripts/README.txt 時,會依照定義的順序檢查自動命令。*.txt
模式符合,因此執行「setf text」以將檔案類型設定為「text」。ruby 的模式也符合,並且執行「setf ruby」。但是由於 'filetype' 已經設定為「text」,因此這裡沒有任何作用。當您編輯檔案 /usr/share/scripts/foobar 時,會檢查相同的自動命令。只有 ruby 的自動命令符合,「setf ruby」將 'filetype' 設定為 ruby。if did_filetype() finish endif if getline(1) =~ '^#!.*[/\\]xyz\>' setf xyz endif使用 did_filetype() 的第一個檢查是為了避免您檢查檔案類型已由檔案名稱偵測到的檔案內容。這可以避免在「setf」命令不會執行任何操作時浪費時間檢查檔案。scripts.vim 檔案是由預設 filetype.vim 檔案中的自動命令所引用。因此,檢查的順序是