檔案類型

Nvim :help 頁面,從 原始碼使用 tree-sitter-vimdoc 解析器產生


檔案類型 file-type
另請參閱 autocmd.txt

1. 檔案類型 filetypes file-types

Vim 可以偵測編輯的檔案類型。這是透過檢查檔案名稱,有時會檢查檔案內容中的特定文字來完成的。
:filetype :filet 若要啟用檔案類型偵測,請在您的 vimrc 中使用此命令
:filetype on
每次編輯新的或現有的檔案時,Vim 都會嘗試辨識檔案的類型並設定 'filetype' 選項。這將觸發 FileType 事件,可用於設定語法高亮、設定選項等。
詳細資訊:":filetype on" 命令將載入以下檔案:$VIMRUNTIME/filetype.lua $VIMRUNTIME/filetype.vim filetype.lua 會建立一個自動命令,該命令會針對所有 BufNewFile 和 BufRead 事件觸發。它會嘗試根據檔案的副檔名或名稱偵測檔案類型。
filetype.vim 是一個 Vim 腳本,為 BufNewFile 和 BufRead 事件定義自動命令。與 filetype.lua 不同,此檔案會為每個檔案類型模式建立單獨的 BufNewFile 和 BufRead 事件。
如果無法透過名稱找到檔案類型,則會使用 $VIMRUNTIME/scripts.vim 檔案從檔案內容中偵測。當 GUI 正在執行或即將啟動時,也會載入 menu.vim 腳本。
若要新增您自己的檔案類型,請參閱下方的 new-filetype。若要搜尋檔案類型的說明,請在前面加上 "ft-",並可選擇性地附加 "-syntax"、"-indent" 或 "-plugin"。例如
:help ft-vim-indent
:help ft-vim-syntax
:help ft-man-plugin
如果檔案類型未自動偵測到,或找到錯誤的類型,您可以手動設定 'filetype' 選項,或在您的檔案中新增一個 modeline。例如,對於 IDL 檔案,請使用以下命令
:set filetype=idl
或將此 modeline 新增到檔案中
/* vim: set filetype=idl : */
:filetype-plugin-on
您可以使用以下命令啟用載入特定檔案類型的外掛檔案
:filetype plugin on
如果檔案類型偵測尚未開啟,它也會被開啟。這實際上會載入 'runtimepath' 中的 "ftplugin.vim" 檔案。結果是,當編輯檔案時,會載入其外掛檔案(如果存在與偵測到的檔案類型相對應的外掛檔案)。filetype-plugin
:filetype-plugin-off
您可以使用以下命令再次停用它
:filetype plugin off
檔案類型偵測不會被關閉。但是,如果您關閉檔案類型偵測,外掛程式也不會被載入。這實際上會載入 'runtimepath' 中的 "ftplugof.vim" 檔案。
:filetype-indent-on
您可以使用以下命令啟用載入特定檔案類型的縮排檔案
:filetype indent on
如果檔案類型偵測尚未開啟,它也會被開啟。這實際上會載入 'runtimepath' 中的 "indent.vim" 檔案。結果是,當編輯檔案時,會載入其縮排檔案(如果存在與偵測到的檔案類型相對應的縮排檔案)。indent-expression
:filetype-indent-off
您可以使用以下命令再次停用它
:filetype indent off
檔案類型偵測不會被關閉。但是,如果您關閉檔案類型偵測,縮排檔案也不會被載入。這實際上會載入 'runtimepath' 中的 "indoff.vim" 檔案。這會停用您將開啟的檔案的自動縮排功能。它將在已開啟的檔案中繼續運作。重設 'autoindent''cindent''smartindent' 和/或 'indentexpr' 以停用已開啟檔案中的縮排。
:filetype-off
若要停用檔案類型偵測,請使用此命令
:filetype off
這將保留 "plugin" 和 "indent" 的標誌,但由於未偵測到任何檔案類型,它們將無法運作,直到下一次 ":filetype on" 為止。
命令 偵測 外掛程式 縮排
:filetype on on 未變更 未變更 :filetype off off 未變更 未變更 :filetype plugin on on on 未變更 :filetype plugin off 未變更 off 未變更 :filetype indent on on 未變更 on :filetype indent off 未變更 未變更 off :filetype plugin indent on on on on :filetype plugin indent off 未變更 off off
若要檢視目前狀態,請輸入
:filetype
輸出看起來像這樣
filetype detection:ON  plugin:ON  indent:OFF
檔案類型也用於語法高亮。如果使用 ":syntax on" 命令,也會安裝檔案類型偵測。在 ":syntax on" 之後,無需執行 ":filetype on"。
若要停用其中一個檔案類型,請在您的檔案類型檔案中新增一行,請參閱 remove-filetype
filetype-detect
若要再次偵測檔案類型
:filetype detect
如果您從空白檔案開始並輸入了可偵測檔案類型的文字,請使用此命令。例如,當您在 shell 腳本中輸入 "#!/bin/csh" 時。如果檔案類型偵測已關閉,則會先啟用它,就像使用 "on" 引數一樣。
filetype-overrule
當多個檔案類型使用相同的副檔名時,Vim 會嘗試猜測它是哪種類型的檔案。這並不總是有效。可以使用許多全域變數來覆寫用於某些副檔名的檔案類型
檔案名稱 變數
*.asa g:filetype_asa ft-aspperl-syntax ft-aspvbs-syntax *.asm g:asmsyntax ft-asm-syntax *.asp g:filetype_asp ft-aspperl-syntax ft-aspvbs-syntax *.bas g:filetype_bas ft-basic-syntax *.cfg g:filetype_cfg *.cls g:filetype_cls *.csh g:filetype_csh ft-csh-syntax *.dat g:filetype_dat *.def g:filetype_def *.dsp g:filetype_dsp *.f g:filetype_f ft-forth-syntax *.frm g:filetype_frm ft-form-syntax *.fs g:filetype_fs ft-forth-syntax *.h g:c_syntax_for_h ft-c-syntax *.i g:filetype_i ft-progress-syntax *.inc g:filetype_inc *.lsl g:filetype_lsl *.m g:filetype_m ft-mathematica-syntax *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md g:filetype_md ft-pandoc-syntax *.mod g:filetype_mod *.p g:filetype_p ft-pascal-syntax *.pl g:filetype_pl *.pp g:filetype_pp ft-pascal-syntax *.prg g:filetype_prg *.r g:filetype_r *.sig g:filetype_sig *.sql g:filetype_sql ft-sql-syntax *.src g:filetype_src *.sys g:filetype_sys *.sh g:bash_is_sh ft-sh-syntax *.tex g:tex_flavor ft-tex-plugin *.typ g:filetype_typ *.v g:filetype_v *.w g:filetype_w ft-cweb-syntax
對於少數檔案類型,全域變數僅在無法偵測到檔案類型時才使用:*.r g:filetype_r ft-rexx-syntax
filetype-ignore
為了避免檢查某些檔案,會使用 g:ft_ignore_pat 變數。預設值設定如下
:let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
這表示不會檢查壓縮檔案的內容。
new-filetype
如果尚未偵測到您想要使用的檔案類型,則有幾種方法可以新增它。建議的方法是使用 vim.filetype.add() 將其新增到 Nvim 的內建檔案類型偵測機制。如果您想手動處理偵測,請按如下方式操作
A. 如果您想要覆寫所有預設檔案類型檢查。這可以透過為每個檔案類型寫入一個檔案來完成。缺點是可能會有很多檔案。優點是您可以簡單地將此檔案放入正確的目錄中使其運作。ftdetect
1. 建立您的使用者執行時期目錄。您通常會使用 'runtimepath' 選項的第一個項目。然後在其內部建立 "ftdetect" 目錄。例如,對於 Unix
:!mkdir -p ~/.config/nvim/ftdetect
2. 建立一個包含自動命令以偵測檔案類型的檔案。例如
au BufRead,BufNewFile *.mine                set filetype=mine
請注意,沒有 "augroup" 命令,這在載入您的檔案時已經完成。您也可以使用模式 "*",然後檢查檔案內容以辨識它。將此檔案寫為您使用者執行時期目錄中 "ftdetect" 目錄中的 "mine.vim"。例如,對於 Unix
:w ~/.config/nvim/ftdetect/mine.vim
3. 若要使用新的檔案類型偵測,您必須重新啟動 Vim。
在所有預設檢查之後會使用 "ftdetect" 目錄中的檔案,因此它們可以覆寫先前偵測到的檔案類型。但是您也可以使用 :setfiletype 以保留先前偵測到的檔案類型。
B. 如果您想要在預設檔案類型檢查之後偵測您的檔案。
這與上面的 A 類似,但是不要無條件地設定 'filetype',而是使用 ":setfiletype"。這只會在尚未偵測到檔案類型時設定 'filetype'。例如
au BufRead,BufNewFile *.txt                setfiletype text
您也可以在您的命令中使用已偵測到的檔案類型。例如,當偵測到 "pascal" 時,使用檔案類型 "mypascal"
au BufRead,BufNewFile *                if &ft == 'pascal' | set ft=mypascal
                                                               | endif
C. 如果您的檔案類型可以透過檔案名稱或副檔名偵測到。1. 建立您的使用者執行時期目錄。您通常會使用 'runtimepath' 選項的第一個項目。例如,對於 Unix
:!mkdir -p ~/.config/nvim
2. 建立一個包含自動命令以偵測檔案類型的檔案。例如
" my filetype file
if exists("did_load_filetypes")
  finish
endif
augroup filetypedetect
  au! BufRead,BufNewFile *.mine                setfiletype mine
  au! BufRead,BufNewFile *.xyz                setfiletype drawing
augroup END
將此檔案寫為您使用者執行時期目錄中的 "filetype.vim"。例如,對於 Unix
:w ~/.config/nvim/filetype.vim
3. 若要使用新的檔案類型偵測,您必須重新啟動 Vim。
您的 filetype.vim 將在安裝預設 FileType 自動命令之前載入。您的自動命令將首先匹配,而 ":setfiletype" 命令將確保在此之後沒有其他自動命令會設定 'filetype'new-filetype-scripts
D. 如果您的檔案類型只能透過檢查檔案內容來偵測。
1. 建立您的使用者執行期目錄。您通常會使用 'runtimepath' 選項的第一個項目。Unix 範例如下:
:!mkdir -p ~/.config/nvim
2. 建立一個 Vim 腳本檔案來執行此操作。範例如下:
if did_filetype()        " filetype already set..
  finish                " ..don't do these checks
endif
if getline(1) =~ '^#!.*\<mine\>'
  setfiletype mine
elseif getline(1) =~? '\<drawing\>'
  setfiletype drawing
endif
請參閱 $VIMRUNTIME/scripts.vim 以取得更多範例。將此檔案寫入您的使用者執行期目錄中,並命名為 "scripts.vim"。例如,針對 Unix:
:w ~/.config/nvim/scripts.vim
3. 偵測功能會立即生效,無需重新啟動 Vim。
您的 scripts.vim 會在預設的檔案類型檢查之前載入,這表示您的規則會覆蓋 $VIMRUNTIME/scripts.vim 中的預設規則。
remove-filetype
如果偵測到的檔案類型不符合您的需求,您可以將 'filetype' 設定為不存在的名稱(例如 ignored),以避免稍後又被設定。
g:did_load_filetypes
可以透過設定 did_load_filetypes 全域變數來停用 Nvim 提供的內建檔案類型偵測。如果此變數存在,預設的 $VIMRUNTIME/filetype.lua 將不會執行。
plugin-details
"plugin" 目錄可以位於 'runtimepath' 選項中的任何目錄中。將會搜尋所有這些目錄以尋找外掛程式,並且它們都會被載入。例如,如果此命令:
set runtimepath
產生此輸出:
runtimepath=/etc/vim,~/.config/nvim,/usr/local/share/vim/vim82
那麼 Vim 將會載入這些目錄及其子目錄中的所有外掛程式:
/etc/vim/plugin/
~/.config/nvim/plugin/
/usr/local/share/vim/vim82/plugin/
請注意,最後一個是已展開的 $VIMRUNTIME 的值。
請注意,當使用外掛程式管理器或 套件 時,許多目錄將會被加入至 'runtimepath' 中。這些外掛程式各自需要自己的目錄,請勿直接將它們放在 ~/.config/nvim/plugin 中。
如果您的外掛程式看起來沒有被載入,該怎麼辦?您可以使用 -V 參數來找出 Vim 啟動時發生的事情:
vim -V2
您會看到許多訊息,其中包含關於載入外掛程式的說明。它以以下內容開頭:
Searching for "plugin/**/*.vim" in
您可以在這裡看到 Vim 在哪裡尋找您的外掛程式腳本。

2. 檔案類型外掛程式 filetype-plugins

當檔案類型外掛程式載入已啟用 :filetype-plugin-on 時,將會設定選項並定義映射。這些設定和映射都是緩衝區本機的,不會用於其他檔案。
為檔案類型定義映射可能會妨礙您自己定義的映射。有幾種方法可以避免這種情況:1. 將 "maplocalleader" 變數設定為您希望映射開始的按鍵序列。範例如下:
:let maplocalleader = ","
然後,所有映射都將以逗號開頭,而不是預設的反斜線。另請參閱 <LocalLeader>
2. 定義您自己的映射。範例如下:
:map ,p <Plug>MailQuote
您需要檢查下方外掛程式檔案的說明,以了解其提供的功能以及要映射的字串。您需要在載入外掛程式之前(在編輯該類型的檔案之前)定義您自己的映射。然後,外掛程式將會跳過安裝預設映射。no_mail_maps g:no_mail_maps 3. 透過設定包含檔案類型名稱的變數,停用特定檔案類型的映射定義。對於 "mail" 檔案類型,這會是:
:let no_mail_maps = 1
no_plugin_maps g:no_plugin_maps 4. 透過設定變數,停用所有檔案類型的映射定義:
:let no_plugin_maps = 1
ftplugin-overrule
如果全域檔案類型外掛程式的功能不完全符合您的需求,有三種方法可以變更:
1. 新增一些設定。您必須在 'runtimepath' 中較早的目錄中建立新的檔案類型外掛程式。例如,對於 Unix,您可以使用此檔案:
vim ~/.config/nvim/ftplugin/fortran.vim
您可以設定您想要新增的設定和映射。請注意,全域外掛程式將在此之後載入,它可能會覆蓋您在此處執行的設定。如果發生這種情況,您需要使用以下兩種方法之一。
2. 建立外掛程式的副本並進行變更。您必須將副本放在 'runtimepath' 中較早的目錄中。例如,對於 Unix,您可以執行此操作:
cp $VIMRUNTIME/ftplugin/fortran.vim ~/.config/nvim/ftplugin/fortran.vim
然後,您可以根據自己的喜好編輯複製的檔案。由於 b:did_ftplugin 變數將被設定,因此不會載入全域外掛程式。此方法的一個缺點是,當分散式外掛程式得到改進時,您必須再次複製並修改它。
3. 在載入全域外掛程式後覆蓋設定。您必須在 'runtimepath' 結尾的目錄中建立新的檔案類型外掛程式。例如,對於 Unix,您可以使用此檔案:
vim ~/.config/nvim/after/ftplugin/fortran.vim
在這個檔案中,您可以只變更您想要變更的設定。

3. 預設檔案類型外掛程式的文件。 ftplugin-docs

plugin_exec g:plugin_exec 啟用外部命令的執行。這在過去是針對例如 perl 檔案類型外掛程式(以及其他一些外掛程式)設定搜尋路徑而完成的。為了安全起見,預設為停用。
:let g:plugin_exec = 1
也可以僅針對某些檔案類型啟用此功能:
:let g:<filetype>_exec = 1
因此,若要僅針對 ruby 啟用此功能,請設定以下變數:
:let g:ruby_exec = 1
如果設定了全域 plugin_exec<filetype>_exec 特定變數,則檔案類型特定變數應優先。
若要啟用 摺疊,請使用:
let g:asciidoc_folding = 1
若要停用摺疊標題的巢狀結構,請使用:
let g:asciidoc_foldnested = 0
若要停用摺疊標題下的所有內容,請使用:
let asciidoc_fold_under_title = 0

ARDUINO ft-arduino-plugin

預設情況下,會根據 Arduino IDE 的預設設定設定以下選項:
setlocal expandtab tabstop=2 softtabstop=2 shiftwidth=2
若要停用此行為,請在您的 vimrc 中設定以下變數:
let g:arduino_recommended_style = 0

AWK ft-awk-plugin

透過設定以下內容,可以啟用對 GNU Awk 特定功能(例如 @include)的支援:
:let g:awk_is_gawk = 1

CHANGELOG ft-changelog-plugin

允許在 Changelog 檔案中輕鬆輸入 Changelog 條目。有一些值得探索的命令、映射和變數:
選項:'comments' 會設為空白,以避免搞亂格式。'textwidth' 會設為標準的 78。'formatoptions' 會新增 't' 旗標,以便在插入文字時換行。
命令:NewChangelogEntry 會以智慧方式新增新的 Changelog 條目(請參閱下方)。
本機映射:<Leader>o 會以同樣智慧的方式開始新的 Changelog 條目(請參閱下方)。
全域映射:注意:全域映射必須先來源 ftplugin/changelog.vim 檔案才能存取,例如使用:
runtime ftplugin/changelog.vim
在您的 init.vim 中。<Leader>o 會切換至為目前目錄開啟的 ChangeLog 緩衝區,如果 ChangeLog 存在於目前目錄中,則會在新的緩衝區中開啟。然後,它會執行與上述本機 <Leader>o 相同的操作。
變數:g:changelog_timeformat已棄用;請改用 g:changelog_dateformat。g:changelog_dateformat Changelog 條目中使用的日期(和時間)格式。接受的格式與 strftime() 函數的格式相同。預設值為 "%Y-%m-%d",這是許多 ChangeLog 版面的標準格式。g:changelog_username 使用者的姓名和電子郵件地址。預設值是從環境變數和系統檔案推斷出來的。它會在 /etc/passwd 中搜尋目前使用者的註解部分,其中非正式地包含使用者真實姓名,直到第一個分隔逗號。然後,它會檢查 $NAME 環境變數,最後執行 whoamihostname 來建構電子郵件地址。最終形式是:
Full Name  <user@host>
g:changelog_new_date_format 建立新日期條目時要使用的格式。下表說明字串中的特殊權杖:%% 插入單個 '%' 字元;%d 插入上述的日期;%u 插入上述的使用者;%p 插入 b:changelog_entry_prefix 的結果;%c 完成時游標的位置。預設值為 "%d %u\n\n\t* %p%c\n\n",其產生的內容類似於(| 是游標所在的位置,除非在行首,否則它表示行的開頭):
|2003-01-14  Full Name  <user@host>
|
|        * prefix|
g:changelog_new_entry_format 建立新條目時使用的格式。下表說明字串中的特殊權杖:%p 插入 b:changelog_entry_prefix 的結果;%c 完成時游標的位置。預設值為 "\t*%c",其產生的內容類似於:
|        * prefix|
g:changelog_date_entry_search 搜尋日期條目時要使用的搜尋模式。可用於 g:changelog_new_date_format 的相同權杖也可以在此處使用。預設值為 '^\s*%d\_s*%u',它會尋找符合以下形式的行:
|2003-01-14  Full Name  <user@host>
以及一些類似的格式。
g:changelog_date_end_entry_search 搜尋日期條目結尾時要使用的搜尋模式。可用於 g:changelog_new_date_format 的相同權杖也可以在此處使用。預設值為 '^\s*$',它會尋找僅包含空白或完全空白的行。
b:changelog_name b:changelog_name
要搜尋的 ChangeLog 檔案的名稱。預設值為 'ChangeLog'。
b:changelog_path 用於目前緩衝區的 ChangeLog 的路徑。預設值為空白,因此會在與目前緩衝區相同的目錄中搜尋名為 b:changelog_name 的檔案。如果找不到,則會搜尋目前緩衝區的父目錄。這個程序會遞迴進行,直到找到檔案或沒有更多父目錄可搜尋為止。
b:changelog_entry_prefix 呼叫以產生新條目前置詞的函數名稱。此函數不接受任何引數,並且應傳回包含前置詞的字串。傳回空白前置詞也可以。預設值會產生 ChangeLog 路徑名稱和目前緩衝區路徑名稱之間的最短路徑。未來,此變數也可以使用其他變數內容,例如 g:。
Changelog 條目會插入在增加最少量文字的位置。在找出目前的日期和使用者後,會在檔案中搜尋以目前日期和使用者開頭的條目,如果找到,則會在該條目下新增另一個項目。如果找不到,則會在 Changelog 的開頭附加新的條目和項目。
選項:除非使用者在 vimrc 中設定了 fortran_have_tabs,否則會開啟 'expandtab' 選項以避免使用 Tab 字元,這是 Fortran 標準所要求的。'textwidth' 選項對於固定格式的原始碼會設定為 80,而對於自由格式的原始碼則會設定為 132。設定 fortran_extended_line_length 變數會將固定格式的原始碼寬度增加到 132。'formatoptions' 選項設定為斷開程式碼和註解行,並保留長行。您可以使用 gq 來格式化註解。關於 fortran_have_tabs 的進一步討論以及用於偵測原始碼格式的方法,請參閱 ft-fortran-syntax
此插件旨在將四種 FreeBASIC 方言 "fb"、"qb"、"fblite" 和 "deprecated" 視為不同的語言。
方言將設定為在 g:freebasic_forcelang 中找到的第一個名稱、正在編輯的檔案中的任何 #lang 指令或 $lang 後設指令,或者最後是 g:freebasic_lang。這些全域變數在概念上對應於 fbc 選項 -forcelang 和 -lang。如果沒有明確指定方言,則將使用 "fb"。
例如,若要將方言的預設值設定為 "fblite",但仍允許任何 #lang 指令覆寫,請使用以下命令
let g:freebasic_lang = "fblite"

GDSCRIPT ft-gdscript-plugin

預設情況下,會根據 Godot 官方文件設定以下選項
setlocal noexpandtab softtabstop=0 shiftwidth=0
若要停用此行為,請在您的 vimrc 中設定以下變數:
let g:gdscript_recommended_style = 0

GIT COMMIT ft-gitcommit-plugin

提供了一個命令 :DiffGitCached,用於在預覽視窗中顯示目前提交的差異。它等效於呼叫 "git diff --cached" 加上給定命令的任何參數。
預設情況下,會根據 Golang 官方文件設定以下選項
setlocal noexpandtab softtabstop=0 shiftwidth=0
若要停用此行為,請在您的 vimrc 中設定以下變數:
let g:go_recommended_style = 0

GPROF ft-gprof-plugin

gprof 檔案類型插件定義了一個映射 <C-]>,以便從 gprof 平面分析中的函式條目或呼叫圖中的函式條目跳轉到呼叫圖中該函式的詳細資訊。
可以使用以下方式停用映射
let g:no_gprof_maps = 1

HARE ft-hare

由於此插件的文字相當長,因此已將其放在單獨的檔案中:ft_hare.txt
每當變數 "g:ftplugin_java_source_path" 被定義且其值為副檔名為 ".jar" 或 ".zip" 的檔案名稱時,例如:
let g:ftplugin_java_source_path = '/path/to/src.jar'
let g:ftplugin_java_source_path = '/path/to/src.zip'
zip 插件已載入時,可以使用 gf 命令開啟封存檔,並且可以使用 n 命令尋找選定的類型,並且可以使用 <Return> 鍵載入列出的檔案。
請注意,在已載入 Zip 插件的緩衝區內使用 "gf" 命令的效果取決於 Zip 插件的版本。對於不支援 Jar 類型封存檔的 Zip 插件版本,請考慮為每個感興趣的 Jar 封存檔建立副檔名為 ".zip" 的符號連結,並從現在起將任何此類檔案指派給變數。
否則,對於已定義的變數 "g:ftplugin_java_source_path",'path' 選項的本機值將透過加上變數的值來進一步修改,例如:
let g:ftplugin_java_source_path = $JDK_SRC_PATH
let &l:path = g:ftplugin_java_source_path . ',' . &l:path
並且 "gf" 命令可以用於完全限定的類型,以在 "path" 中尋找檔案並嘗試載入它。
每次在為變數指派新值後,請記得從載入 Java 檔案的緩衝區手動觸發 FileType 事件
doautocmd FileType
Markdown 文件註解可能會包含註解標記 (///) 後面常見的垂直前導空白字元,這純粹是為了美觀;然而,一些水平前導空白字元在 Markdown 中非常重要,因為它們表示程式碼區塊等。為了方便起見,為 gq 運算子提供了一個 'formatexpr' 函式。只要沒有定義 "g:java_ignore_javadoc" 或 "g:java_ignore_markdown",就可以使用以下方式根據需要啟用 Markdown 註解的重新格式化
setlocal formatexpr=g:javaformat#RemoveCommonMarkdownWhitespace()
或者,對於版本低於 7.4.265 的 Vim 版本,使用
setlocal formatexpr=javaformat#RemoveCommonMarkdownWhitespace()
此函式接受一系列行,移除常見的垂直前導空白字元,並重寫該範圍的行。根據作者的版面配置樣式和註解內容,要選取哪些行進行重新格式化可能會從整個註解到僅其中的一部分不等。若要在移除 "g:java_ignore_markdown" 或 "g:java_ignore_javadoc" 後每次都啟用對 Markdown 註解的辨識,請記得針對大於 8.2.1397 的 Vim 版本手動重新載入 "javaformat.vim"
runtime autoload/javaformat.vim
選項:'modeline' 選項已關閉,以避免木馬程式的危險,並避免主旨行中包含 "Vim:" 會導致錯誤訊息。'textwidth' 選項設定為 72。這通常建議用於電子郵件。'formatoptions' 選項設定為斷開文字行,並在新行中重複註解引導字元,以便重複引號的引導 ">"。您也可以使用 gq 來格式化引用的文字。
本機映射:<LocalLeader>q 或 \\MailQuote 引號視覺模式中選取的文字,或從游標位置到一般模式下檔案的結尾。這表示在每一行中都會插入 "> "。
在 Nvim 中檢視手冊頁。支援醒目提示、完成、地區設定和導覽。另請參閱 find-manpage
man.lua 會始終嘗試重複使用最近的手冊視窗(上方/左側),否則會建立分割。
完成的大小寫敏感度由 'fileignorecase' 控制。
命令:Man {name} 顯示 {name} 的手冊頁。Man {sect} {name} 顯示 {name} 和區段 {sect} 的手冊頁。Man {name}({sect}) 與上述相同。Man {sect} {name}({sect}) 在完成期間使用,以顯示提供的區段為前綴時的真實區段,例如 1m 與 1。Man {path} 開啟 {path} 的手冊頁。如果 {path} 相對於目前目錄,則會在前面加上 "./"。Man 開啟游標下方 <cWORD>(手冊緩衝區)或 <cword>(非手冊緩衝區)的手冊頁。Man! 將目前緩衝區內容顯示為手冊頁。
:Man 接受命令修飾符。例如,若要使用垂直分割
:vertical Man printf
若要重複使用目前的視窗
:hide Man printf
本機映射:K 或 CTRL-] 跳轉到游標下方 <cWORD> 的手冊頁。接受區段的計數。CTRL-T 跳回手冊頁開啟的位置。gO 顯示手冊頁大綱。gO q:如果以 $MANPAGER 形式呼叫則 :quit,否則 :close。
變數:g:no_man_maps 不要在手冊頁緩衝區中建立映射。g:ft_man_folding_enable 以 foldmethod=indent foldnestmax=1 折疊手冊頁。b:man_default_sects 偏好區段的逗號分隔、依序排列的清單。例如,在 C 中,通常需要第 3 或第 2 區段
:let b:man_default_sections = '3,2'
g:man_hardwrap 硬換行到 $MANWIDTH 或視窗寬度(如果 $MANWIDTH 為空)。預設為啟用。設定為 FALSE 以啟用軟換行。
若要將 Nvim 用作手冊瀏覽器
export MANPAGER='nvim +Man!'
請注意,當從 Shell 執行 man 且環境中具有 MANPAGER 時,man 將使用 groff 預先格式化手冊頁。因此,Nvim 將不可避免地顯示從 stdin 傳遞給它的手冊頁。其中一個需要注意的地方是,寬度將 _始終_ 硬換行,而不是像 g:man_hardwrap=0 一樣軟換行。您可以在您的環境中設定
export MANWIDTH=999
因此,groff 的預格式化輸出將與 g:man_hardwrap=0 相同,即軟換行。
若要停用粗體醒目提示
:highlight link manBold Normal
在 Shell 中使用 MANPAGER 的替代方法是可以重新定義 man,例如
man() {
     nvim "+hide Man $1"
}

MARKDOWN ft-markdown-plugin

若要啟用折疊,請使用以下命令
let g:markdown_folding = 1
預設將設定 'expandtab'。如果您不希望這樣,請使用以下命令
let g:markdown_recommended_style = 0

PDF ft-pdf-plugin

提供了兩個映射 <C-]><C-T>,以模擬用於導覽 PDF 的標籤堆疊。以下內容會被視為標籤
"startxref" 後面的位元組偏移量到交叉參考表
預告片中 /Prev 鍵後面的位元組偏移量到較早的交叉參考表
交叉參考表中形式為 "0123456789 00000 n" 的行
PDF 中任何位置的物件參考,例如 "1 0 R"
可以使用以下方式停用這些映射
:let g:no_pdf_maps = 1
預設情況下,會根據 PEP8 設定以下選項
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
若要停用此行為,請在您的 vimrc 中設定以下變數:
let g:python_recommended_style = 0

QUERY ft-query-plugin

預設情況下,會針對已安裝的剖析器在 BufEnterBufWrite 上啟用使用 vim.treesitter.query.lint() 的 Tree-sitter 查詢檢查。若要變更觸發檢查的事件,請使用
vim.g.query_lint_on = { 'InsertLeave', 'TextChanged' }
若要完全停用檢查,請設定
vim.g.query_lint_on = {}

QF 快速修正 qf.vim ft-qf-plugin

"qf" 檔案類型用於快速修正視窗,請參閱 quickfix-window
快速修正檔案類型插件包含用於在 狀態行中顯示產生快速修正清單的命令的設定。若要停用此設定,請如下配置
:let g:qf_disable_statusline = 1
R MARKDOWN ft-rmd-plugin
預設情況下,不會載入 ftplugin/html.vim。如果您想要載入它,請將以下內容新增至您的 vimrc
let rmd_include_html = 1
'formatexpr' 選項會針對 R 程式碼和 Markdown 程式碼動態設定不同的值。如果您偏好不設定 'formatexpr',請將以下內容新增至您的 vimrc
let rmd_dynamic_comments = 0
R RESTRUCTURED TEXT ft-rrst-plugin
'formatexpr' 選項會針對 R 程式碼和 ReStructured 文字動態設定不同的值。如果您偏好不設定 'formatexpr',請將以下內容新增至您的 vimrc
let rrst_dynamic_comments = 0

RESTRUCTUREDTEXT ft-rst-plugin

以下格式化設定為可選
setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8
要啟用此行為,請在您的 vimrc 中設定以下變數
let g:rst_style = 1

RNOWEB ft-rnoweb-plugin

'formatexpr' 選項會動態設定不同的值,分別用於 R 程式碼和 LaTeX 程式碼。如果您不希望設定 'formatexpr',請將以下內容加入您的 vimrc
let rnw_dynamic_comments = 0

RPM SPEC ft-spec-plugin

由於此插件的文字相當長,因此已將其放入單獨的檔案:pi_spec.txt

SHADA ft-shada

允許以友好的方式編輯二進位 shada-file。開啟的二進位檔案會以下列格式顯示
Type with timestamp YYYY-mm-ddTHH:MM:SS:
  % Key__  Description___  Value
  + fooba  foo bar baz fo  {msgpack-value}
  + abcde  abc def ghi jk  {msgpack-value}
Other type with timestamp YYYY-mm-ddTHH:MM:SS:
  @ Description__  Value
  - foo bar baz t  {msgpack-value}
  # Expected more elements in list
Some other type with timestamp YYYY-mm-ddTHH:MM:SS:
  # Unexpected type: type instead of map
  = {msgpack-value}
檔案類型插件定義所有 Cmd-event。已定義的 SourceCmd 事件使 "source file.shada" 等同於 "|:rshada| file.shada"。 BufWriteCmdFileWriteCmdFileAppendCmd 事件會受到以下設定的影響
g:shada#keep_old_header 布林值,如果設定為 false,則寫入時會忽略所有標頭條目。預設值為 1。g:shada#add_own_header 布林值,如果設定為 true,則第一個寫入的條目將始終是標頭條目,其中包含具有附加資料的映射中的兩個值: v:version 附加到 "version" 鍵,而 "shada.vim" 附加到 "generator" 鍵。預設值為 1。
格式描述
1. # 開頭為註解。以空格字元開頭,然後接 # 的行將被忽略。插件可能只會新增註解行來指示 ShaDa 格式中的一些錯誤。不包含任何非空白字元的行也會被忽略。2. 每個條目都以格式為 "{type} with timestamp {timestamp}:" 的行開頭。{timestamp} 是表示實際 Unix 時間戳值的 strftime() 格式化字串。第一個 strftime() 引數等於 %Y-%m-%dT%H:%M:%S。寫入時,此時間戳會使用具有快取的 msgpack#strptime() 進行剖析(它會記住哪個時間戳產生特定的 strftime() 輸出,如果您沒有變更時間戳,則會使用此值)。{type} 是以下其中之一:1 - 標頭、2 - 搜尋模式、3 - 取代字串、4 - 歷史記錄條目、5 - 暫存器、6 - 變數、7 - 全域標記、8 - 跳躍、9 - 緩衝區清單、10 - 本機標記、11 - 變更 * - 未知 (0x{type-hex})
可以使用未知條目表示每個類型:「Jump with timestamp ...」與「Unknown (0x8) with timestamp ....」相同。3. 在標頭之後,會有以下其中一行:1. " % Key__ Description__ Value":映射標頭。在映射標頭之後,是一個表格,其中可能包含註解和由 " +"、鍵、描述和 {msgpack-value} 組成的行。鍵與描述之間至少以兩個空格分隔,而描述與值之間至少以兩個空格分隔。映射中的每個鍵的寬度都必須與 "Key__" 標頭一樣寬:「Key」最多允許 3 位元組的鍵,「Key__」最多允許 5 位元組的鍵。如果鍵實際上佔用的位元組較少,則其餘部分會以空格填滿。鍵不能為空、以空格結尾、在其中包含兩個連續空格或包含多位元組字元(如果需要,請使用 "=" 格式)。描述在寬度和內容方面具有相同的限制,只是允許空描述。描述欄可以省略。
寫入時會忽略描述。值與預設值 msgpack#equal 的鍵會被忽略。會保留鍵的順序。所有鍵都會被視為字串(而不是二進位字串)。
注意: 特別是對於緩衝區清單條目,允許有多個映射標頭。每個映射標頭都會在緩衝區清單中開始一個新的映射條目,因為 ShaDa 緩衝區清單條目是一個映射陣列。也就是說
Buffer list with timestamp 1970-01-01T00:00:00:
  % Key  Description  Value
  + f    file name    "/foo"
  + l    line number  1
  + c    column       10
等效於
Buffer list with timestamp 1970-01-01T00:00:00:
  = [{="f": "/foo", ="c": 10}]
Buffer list with timestamp 1970-01-01T00:00:00:
  % Key  Description  Value
  + f    file name    "/foo"
  % Key  Description  Value
  + f    file name    "/bar"
等效於
Buffer list with timestamp 1970-01-01T00:00:00:
  = [{="f": "/foo"}, {="f": "/bar"}]
注意 2:特別是對於暫存器條目,已設計陣列的特殊語法
Register with timestamp 1970-01-01T00:00:00:
  % Key  Description  Value
  + rc   contents     @
  | - "line1"
  | - "line2"
這等效於
Register with timestamp 1970-01-01T00:00:00:
  % Key  Description  Value
  + rc   contents     ["line1", "line2"]
如果陣列表示形式看起來太長,則會自動使用此類語法。2. " @ Description__ Value":陣列標頭。與映射相同,但省略了鍵,並且不能省略描述。陣列條目以 " -" 開頭。範例
History entry with timestamp 1970-01-01T00:00:00:
  @ Description_  Value
  - history type  SEARCH
  - contents      "foo"
  - separator     '/'
等效於
History entry with timestamp 1970-01-01T00:00:00:
  = [SEARCH, "foo", '/']
注意: 這裡不識別暫存器條目的特殊陣列語法。3. " = {msgpack-value}":原始值。在這種情況下,{msgpack-value} 可能具有絕對任何類型。這裡也不會識別暫存器條目的特殊陣列語法。

RUST ft-rust

由於此插件的文字相當長,因此已將其放入單獨的檔案:ft_rust.txt

SQL ft-sql

由於此插件的文字相當長,因此已將其放入單獨的檔案:ft_sql.txt
如果 *.tex 檔案的第一行具有以下格式
%&<format>
則此設定檔案類型:plaintex(用於 plain TeX)、context(用於 ConTeXt)或 tex(用於 LaTeX)。否則,將搜尋檔案中的關鍵字來選擇 context 或 tex。如果找不到任何關鍵字,則預設為 plaintex。您可以透過將變數 g:tex_flavor 定義為您最常使用的格式(而非檔案類型)來變更預設值。請使用以下其中一項
let g:tex_flavor = "plain"
let g:tex_flavor = "context"
let g:tex_flavor = "latex"
目前不識別其他格式。
g:typst_conceal
TRUE 時,Typst 檔案類型插件會將 'conceallevel' 選項設定為 2。
g:typst_folding
TRUE 時,Typst 檔案類型插件會摺疊標題。(預設值:FALSE
要啟用
let g:typst_folding = 1
g:typst_foldnested
TRUE 時,Typst 檔案類型插件會將巢狀標題摺疊在其父標題下。(預設值:TRUE
要停用
let g:typst_foldnested = 0
Vim 檔案類型插件定義了使用 [[ 和 ]] 移動到函式開頭和結尾的映射。使用 ]" 和 [" 在註解之間移動。
可以使用以下方式停用映射
let g:no_vim_maps = 1

ZIG ft-zig-plugin

g:zig_recommended_style
預設情況下,會根據 Zig 的建議樣式設定以下縮排選項(https://ziglang.org/documentation/master/
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
要停用此行為,請將 g:zig_recommended_style 設定為 0
let g:zig_recommended_style = 0
g:zig_std_dir
Zig 標準程式庫的路徑。Zig ftplugin 會讀取 g:zig_std_dir 並將其附加到 Zig 檔案的 'path'。Zig 標準程式庫的所在位置取決於系統和安裝方法。
可以使用 zig env 自動設定 g:zig_std_dir
let g:zig_std_dir = json_decode(system('zig env'))['std_dir']
例如,可以將其放入 FileType :autocmd 或使用者 ftplugin 中,以僅在開啟 Zig 檔案時載入。
Zimbu 檔案類型插件定義了使用 [[ 和 ]] 移動到函式開頭和結尾的映射。
可以使用以下方式停用映射
let g:no_zimbu_maps = 1
主要
命令索引
快速參考