Nvim :help
頁面,從 原始碼 使用 tree-sitter-vimdoc 解析器產生。
:make {arguments}如果產生錯誤,它們會被捕獲,並且編輯器會將您定位到第一個發生錯誤的地方。看看一個 ":make" 會話的範例。(典型的 :make 會話會產生更多的錯誤,以及更少的愚蠢錯誤。)在輸入 ":make" 後,畫面看起來像這樣
<Enter>
時,Vim 會顯示「main.c」檔案,游標位於第 6 行,也就是第一個有錯誤的行。您不需要指定檔案或行號,Vim 會透過查看錯誤訊息來知道要去哪裡。+---------------------------------------------------+ |int main() | |{ | | int i=3; | cursor -> | do_sub("foo"); | | ++i; | | return (0); | |} | |} | | ~ | |(3 of 12): too many arguments to function 'do_sub' | +---------------------------------------------------+
:cnextVim 會跳到第 10 行,也就是檔案中的最後一行,那裡有一個多餘的「}」。當空間不足時,Vim 會縮短錯誤訊息。若要查看完整訊息,請使用
:cc您可以使用 ":clist" 指令取得所有錯誤訊息的概述。輸出看起來像這樣
:clist
:clist!
:cprevious在錯誤清單中移動的其他指令
:set makeprg=nmake您也可以在此選項中加入引數。特殊字元需要使用反斜線跳脫。範例
:set makeprg=nmake\ -f\ project.mak您可以在指令規格中包含特殊的 Vim 關鍵字。% 字元會展開為目前檔案的名稱。因此,如果您執行以下指令
:set makeprg=make\ %:S當您正在編輯 main.c 時,":make" 會執行以下指令
make main.c這不是很有用,因此您會稍微細化指令並使用 :r(根)修飾符
:set makeprg=make\ %:r:S.o現在執行的指令如下
make main.o關於這些修飾符的更多資訊:filename-modifiers。
:colder然後使用 ":clist" 和 ":cc
{nr}
" 跳到具有警告的地方。若要向前跳到下一個錯誤清單:cnewerVim 會記住十個錯誤清單。
:compiler msvc這會尋找「msvc」編譯器的 Vim 指令碼,並設定適當的選項。您可以編寫自己的編譯器檔案。請參閱 write-compiler-plugin。
:cfile {filename}跳到錯誤的運作方式將與 ":make" 指令相同。
:set cindent shiftwidth=4啟用此選項後,當您輸入類似「if (x)」的內容時,下一行會自動縮排一個額外的層級。
==這會縮排目前的行。與所有運算子一樣,有三種方法可以使用它。在視覺模式中,「=」會縮排選取的行。一個有用的文字物件是「a{」。這會選取目前 {} 區塊。因此,若要重新縮排游標所在的程式碼區塊
=a{如果您的程式碼縮排非常糟糕,您可以使用以下指令重新縮排整個檔案
gg=G但是,不要在已仔細手動縮排的檔案中執行此操作。自動縮排的效果很好,但在某些情況下,您可能想要覆寫它。
:set cinoptions+={2其中有很多這樣的項目。請參閱 cinoptions-values。
:filetype indent on實際上,這不僅僅是為 C 檔案開啟 'cindent'。首先,它會啟用偵測檔案類型。這與用於語法反白顯示的方式相同。當檔案類型已知時,Vim 會搜尋此類型檔案的縮排檔案。Vim 發行版包含許多用於各種程式設計語言的縮排檔案。然後,此縮排檔案會準備好針對此檔案的自動縮排。
:filetype indent off如果您不喜歡針對某種特定檔案類型的縮排,可以這樣避免它。建立一個只有這一行的檔案
:let b:did_indent = 1現在您需要將其寫入具有特定名稱的檔案
{directory}
/indent/{filetype}.vim{filetype}
是檔案類型的名稱,例如「cpp」或「java」。您可以使用以下指令查看 Vim 偵測到的確切名稱:set filetype在此檔案中,輸出為
{filetype}
。對於 {directory}
部分,您需要使用您的執行時間目錄。請查看以下指令的輸出set runtimepath現在使用第一個項目,也就是第一個逗號之前的名稱。因此,如果輸出看起來像這樣
{directory}
。然後產生的檔案名稱為CTRL-D
和 CTRL-T 命令。例如,您正在輸入一個應該像這樣的 shell 腳本:set autoindent shiftwidth=3您先輸入第一行,
<Enter>
,然後輸入第二行的開頭CTRL-T
。結果是CTRL-T
命令會在行中的任何位置新增一個 'shiftwidth' 的縮排。您繼續輸入第二行,<Enter>
,然後輸入第三行。這次縮排沒問題。然後 <Enter>
,最後一行。現在您有這個CTRL-D
。這會刪除一個 'shiftwidth' 的縮排,無論您在行中的哪個位置。當您處於普通模式時,您可以使用 ">>" 和 "<<" 命令來移動行。「>」和「<」是運算子,因此您可以使用通常的三種方式來指定要縮排的行。一個有用的組合是>i{這會將縮排新增到目前的大括號 {} 內的程式碼區塊中。{ 和 } 行本身保持不變。「>a{」會包含它們。在此範例中,游標位於 "printf" 上
<Tab>
是 8 個空格,而您想使用 4 個空格的縮排,因此您無法使用 <Tab>
字元來建立縮排。有兩種方法可以處理這個問題<Tab>
和空格字元的組合。由於 <Tab>
取代 8 個空格的位置,因此您的檔案中的字元較少。插入 <Tab>
比插入 8 個空格更快。倒退也更快。<Tab>
鍵看起來和感覺像是將 Tab 鍵設定為 'softtabstop' 的值一樣,但實際上使用的是 Tab 鍵和空格的組合。執行以下命令後,每次按下 <Tab>
鍵時,游標都會移動到下一個 4 個欄位的邊界:set softtabstop=4當您從第一欄開始並按下
<Tab>
時,會在您的文字中插入 4 個空格。第二次時,Vim 會取出 4 個空格並放入一個 <Tab>
(因此將您帶到第 8 欄)。因此,Vim 會盡可能使用多的 <Tab>
,然後以空格填滿。倒退時,其運作方式相反。<BS>
將始終刪除 'softtabstop' 指定的數量。然後,盡可能多地使用 <Tab>
,並以空格填補間隙。以下顯示按下 <Tab>
鍵幾次,然後使用 <BS>
時會發生什麼。「.」代表空格,而「------->」代表 <Tab>
。<Tab>
.... <Tab>
<Tab>
-------> <Tab>
<Tab>
<Tab>
------->.... <Tab>
<Tab>
<Tab>
<BS>
-------> <Tab>
<Tab>
<Tab>
<BS>
<BS>
....<Tab>
,並在第一個非空白字元後輸入時使用真正的 <Tab>
。但是,<BS>
的運作方式與 'softtabstop' 不同。:set expandtab當設定此選項時,
<Tab>
鍵會插入一系列空格。因此,您會得到與插入 <Tab>
字元時相同的空白量,但您的檔案中沒有真正的 <Tab>
字元。倒退鍵將單獨刪除每個空格。因此,在輸入一個 <Tab>
之後,您必須按下 <BS>
鍵最多八次才能還原它。如果您處於縮排中,按下 CTRL-D
會更快。:set expandtab :%retab現在,Vim 會將所有縮排變更為使用空格而非 Tab 鍵。但是,所有在非空白字元之後的 Tab 鍵都會被保留。如果您也希望轉換這些 Tab 鍵,請新增一個 !
:%retab!這有點危險,因為它也可能會變更字串內的 Tab 鍵。若要檢查這些是否存在,您可以使用這個
/"[^"\t]*\t[^"]*"建議不要在字串內使用硬 Tab 鍵。將它們取代為 "\t" 以避免麻煩。
:set noexpandtab :%retab!
/*
* This is a test
* of the text formatting.
*/
然後,您將游標放在註解的開頭,然後輸入gq]/"gq" 是設定文字格式的運算子。"]/" 是將您帶到註解結尾的移動。結果是
/*
* This is a test of the text formatting.
*/
請注意,Vim 正確處理了每一行的開頭。另一種方法是在視覺模式中選取要設定格式的文字,然後輸入 "gq"。/*
* This is a test of the text formatting.
*
*/
Vim 會自動為您插入星號和空格。現在您可以輸入註解文字。當它長度超過 'textwidth' 時,Vim 會斷行。同樣,會自動插入星號/*
* This is a test of the text formatting.
* Typing a lot of text here will make Vim
* break
*/
為了讓它運作,'formatoptions' 中必須存在一些旗標<Enter>
時插入星號 o 在普通模式中使用 "o" 或 "O" 時插入星號 c 根據 'textwidth' 斷開註解文字:set comments=://冒號將專案的旗標與註解所識別的文字分開。'comments' 中專案的一般形式為
{flags}
:{text}{flags}
部分可以是空白的,如本例中所示。這些專案中的多個可以串聯起來,並以逗號分隔。這允許同時識別不同類型的註解。例如,讓我們編輯電子郵件訊息。回覆時,其他人撰寫的文字會以 ">" 和 "!" 字元開頭。此命令會有效:set comments=n:>,n:!有兩個專案,一個用於以 ">" 開頭的註解,另一個用於以 "!" 開頭的註解。兩者都使用 "n" 旗標。這表示這些註解會巢狀結構。因此,以 ">" 開頭的行可能會在 ">" 之後有另一個註解。這允許設定像這樣的訊息格式
:set comments=s1:/*,mb:*,ex:*/起始定義為「s1:/*」。其中「s」表示三段式註解的起始。「:」號將標記與註解辨識文字「/*」分開。標記只有一個:「1」。這告訴 Vim 中間部分有一個空格的偏移量。中間部分「mb:*」以「m」開頭,表示它是中間部分。「b」標記表示文字後必須跟隨一個空格。否則,Vim 會認為像「*pointer」這樣的文字也是註解的中間部分。結束部分「ex:*/」的「e」用於識別。「x」標記具有特殊含義。這表示在 Vim 自動插入星號後,輸入 / 將刪除額外的空格。