Nvim :help
頁面,從 原始碼使用 tree-sitter-vimdoc 解析器產生。
:filetype on每次編輯新的或現有的檔案時,Vim 都會嘗試辨識檔案的類型並設定 'filetype' 選項。這將觸發 FileType 事件,可用於設定語法高亮、設定選項等。
: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如果檔案類型偵測尚未開啟,它也會被開啟。這實際上會載入 'runtimepath' 中的 "ftplugin.vim" 檔案。結果是,當編輯檔案時,會載入其外掛檔案(如果存在與偵測到的檔案類型相對應的外掛檔案)。filetype-plugin
:filetype plugin off檔案類型偵測不會被關閉。但是,如果您關閉檔案類型偵測,外掛程式也不會被載入。這實際上會載入 'runtimepath' 中的 "ftplugof.vim" 檔案。
:filetype indent on如果檔案類型偵測尚未開啟,它也會被開啟。這實際上會載入 'runtimepath' 中的 "indent.vim" 檔案。結果是,當編輯檔案時,會載入其縮排檔案(如果存在與偵測到的檔案類型相對應的縮排檔案)。indent-expression
:filetype indent off檔案類型偵測不會被關閉。但是,如果您關閉檔案類型偵測,縮排檔案也不會被載入。這實際上會載入 'runtimepath' 中的 "indoff.vim" 檔案。這會停用您將開啟的檔案的自動縮排功能。它將在已開啟的檔案中繼續運作。重設 'autoindent'、'cindent'、'smartindent' 和/或 'indentexpr' 以停用已開啟檔案中的縮排。
:filetype off這將保留 "plugin" 和 "indent" 的標誌,但由於未偵測到任何檔案類型,它們將無法運作,直到下一次 ":filetype on" 為止。
:filetype輸出看起來像這樣
filetype detection:ON plugin:ON indent:OFF檔案類型也用於語法高亮。如果使用 ":syntax on" 命令,也會安裝檔案類型偵測。在 ":syntax on" 之後,無需執行 ":filetype on"。
:filetype detect如果您從空白檔案開始並輸入了可偵測檔案類型的文字,請使用此命令。例如,當您在 shell 腳本中輸入 "#!/bin/csh" 時。如果檔案類型偵測已關閉,則會先啟用它,就像使用 "on" 引數一樣。
*.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:let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'這表示不會檢查壓縮檔案的內容。
:!mkdir -p ~/.config/nvim/ftdetect
au BufRead,BufNewFile *.mine set filetype=mine
:w ~/.config/nvim/ftdetect/mine.vim
au BufRead,BufNewFile *.txt setfiletype text
au BufRead,BufNewFile * if &ft == 'pascal' | set ft=mypascal | endifC. 如果您的檔案類型可以透過檔案名稱或副檔名偵測到。1. 建立您的使用者執行時期目錄。您通常會使用 'runtimepath' 選項的第一個項目。例如,對於 Unix
:!mkdir -p ~/.config/nvim
" 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
:w ~/.config/nvim/filetype.vim
:!mkdir -p ~/.config/nvim
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
:w ~/.config/nvim/scripts.vim
did_load_filetypes
全域變數來停用 Nvim 提供的內建檔案類型偵測。如果此變數存在,預設的 $VIMRUNTIME/filetype.lua
將不會執行。set runtimepath產生此輸出:
vim -V2您會看到許多訊息,其中包含關於載入外掛程式的說明。它以以下內容開頭:
:let maplocalleader = ","
:map ,p <Plug>MailQuote
:let no_mail_maps = 1
vim ~/.config/nvim/ftplugin/fortran.vim
cp $VIMRUNTIME/ftplugin/fortran.vim ~/.config/nvim/ftplugin/fortran.vim
vim ~/.config/nvim/after/ftplugin/fortran.vim
: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
setlocal expandtab tabstop=2 softtabstop=2 shiftwidth=2若要停用此行為,請在您的 vimrc 中設定以下變數:
let g:arduino_recommended_style = 0
:let g:awk_is_gawk = 1
<Leader>
o 會以同樣智慧的方式開始新的 Changelog 條目(請參閱下方)。runtime ftplugin/changelog.vim
<Leader>
o 會切換至為目前目錄開啟的 ChangeLog 緩衝區,如果 ChangeLog 存在於目前目錄中,則會在新的緩衝區中開啟。然後,它會執行與上述本機 <Leader>
o 相同的操作。whoami
和 hostname
來建構電子郵件地址。最終形式是:Full Name <user@host>
|2003-01-14 Full Name <user@host> | | * prefix|
| * prefix|
|2003-01-14 Full Name <user@host>
let g:freebasic_lang = "fblite"
setlocal noexpandtab softtabstop=0 shiftwidth=0若要停用此行為,請在您的 vimrc 中設定以下變數:
let g:gdscript_recommended_style = 0
setlocal noexpandtab softtabstop=0 shiftwidth=0若要停用此行為,請在您的 vimrc 中設定以下變數:
let g:go_recommended_style = 0
<C-]>
,以便從 gprof 平面分析中的函式條目或呼叫圖中的函式條目跳轉到呼叫圖中該函式的詳細資訊。let g:no_gprof_maps = 1
let g:ftplugin_java_source_path = '/path/to/src.jar' let g:ftplugin_java_source_path = '/path/to/src.zip'
let g:ftplugin_java_source_path = $JDK_SRC_PATH let &l:path = g:ftplugin_java_source_path . ',' . &l:path
doautocmd FileType
///
) 後面常見的垂直前導空白字元,這純粹是為了美觀;然而,一些水平前導空白字元在 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()
8.2.1397
的 Vim 版本手動重新載入 "javaformat.vim"runtime autoload/javaformat.vim
<LocalLeader>
q 或 \\MailQuote 引號視覺模式中選取的文字,或從游標位置到一般模式下檔案的結尾。這表示在每一行中都會插入 "> "。{name}
顯示 {name}
的手冊頁。Man {sect}
{name}
顯示 {name}
和區段 {sect}
的手冊頁。Man {name}
({sect}
) 與上述相同。Man {sect}
{name}
({sect}
) 在完成期間使用,以顯示提供的區段為前綴時的真實區段,例如 1m 與 1。Man {path}
開啟 {path}
的手冊頁。如果 {path}
相對於目前目錄,則會在前面加上 "./"。Man 開啟游標下方 <cWORD>
(手冊緩衝區)或 <cword>
(非手冊緩衝區)的手冊頁。Man! 將目前緩衝區內容顯示為手冊頁。:vertical Man printf
若要重複使用目前的視窗:hide Man printf
本機映射:K 或 CTRL-]
跳轉到游標下方 <cWORD>
的手冊頁。接受區段的計數。CTRL-T 跳回手冊頁開啟的位置。gO 顯示手冊頁大綱。gO q:如果以 $MANPAGER 形式呼叫則 :quit,否則 :close。:let b:man_default_sections = '3,2'g:man_hardwrap 硬換行到 $MANWIDTH 或視窗寬度(如果 $MANWIDTH 為空)。預設為啟用。設定為 FALSE 以啟用軟換行。
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"
}
let g:markdown_folding = 1預設將設定 'expandtab'。如果您不希望這樣,請使用以下命令
let g:markdown_recommended_style = 0
<C-]>
和 <C-T>
,以模擬用於導覽 PDF 的標籤堆疊。以下內容會被視為標籤:let g:no_pdf_maps = 1
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8若要停用此行為,請在您的 vimrc 中設定以下變數:
let g:python_recommended_style = 0
BufEnter
和 BufWrite
上啟用使用 vim.treesitter.query.lint() 的 Tree-sitter 查詢檢查。若要變更觸發檢查的事件,請使用vim.g.query_lint_on = { 'InsertLeave', 'TextChanged' }
vim.g.query_lint_on = {}
:let g:qf_disable_statusline = 1R MARKDOWN ft-rmd-plugin
let rmd_include_html = 1'formatexpr' 選項會針對 R 程式碼和 Markdown 程式碼動態設定不同的值。如果您偏好不設定 'formatexpr',請將以下內容新增至您的 vimrc
let rmd_dynamic_comments = 0R RESTRUCTURED TEXT ft-rrst-plugin
let rrst_dynamic_comments = 0
setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8要啟用此行為,請在您的 vimrc 中設定以下變數
let g:rst_style = 1
let rnw_dynamic_comments = 0
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"。 BufWriteCmd、FileWriteCmd 和 FileAppendCmd 事件會受到以下設定的影響
#
開頭為註解。以空格字元開頭,然後接 #
的行將被忽略。插件可能只會新增註解行來指示 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})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"}]
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"]
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", '/']
{msgpack-value}
":原始值。在這種情況下,{msgpack-value} 可能具有絕對任何類型。這裡也不會識別暫存器條目的特殊陣列語法。*.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"目前不識別其他格式。
let g:typst_folding = 1
let g:typst_foldnested = 0
let g:no_vim_maps = 1
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
let g:zig_recommended_style = 0
let g:no_zimbu_maps = 1