Vi_diff

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


Vim 和 Vi 的差異

1. 限制 limits

Vim 對於可編輯的檔案只有少數限制。Vi 無法處理 <Nul> 字元和 128 以上的字元,有限制的行長度,以及其他許多限制。
最大行長度 2147483647 個字元 最大行數 2147483647 行 最大檔案大小 2147483647 位元組 (2 Gbyte),當長整數為 32 位元時。64 位元長整數則更大。也會受限於 交換檔 的可用磁碟空間。 E75
檔案路徑長度 Unix 和 Win32: 1024 個字元,否則為 256 個字元 (或系統支援的長度)。擴展字串選項長度 Unix 和 Win32: 1024 個字元,否則為 256 個字元。最大顯示寬度 Unix 和 Win32: 1024 個字元,否則為 255 個字元。最大映射左側 (lhs) 50 個字元。不同高亮類型的數量:超過 30000 個。數字變數的範圍:-2147483648 到 2147483647 (在 64 位元系統上可能更大)。標籤檔中一行的最大長度:512 位元組。
undo 的資訊和暫存器中的文字都保存在記憶體中,因此當進行(大)的變更時,可用的(虛擬)記憶體量會限制 undo 的層級數量以及可以保存在暫存器中的文字。其他東西也保存在記憶體中:命令列歷史、Quickfix 模式的錯誤訊息等等。

2. 最有趣的附加功能 vim-additions

支援不同的系統。Vim 可以在以下系統上使用
現代 Unix 系統 (BSD、Linux 等)
Windows (XP SP 2 或更高版本)
OS X
多層次的持續性 undo。undo 'u' 回到過去,'CTRL-R' 再次前進。設定選項 'undolevels' 為要記住的變更次數 (預設為 1000)。設定 'undolevels' 為 0 以獲得與 Vi 相容的單層 undo。設定為 -1 表示完全不 undo。當緩衝區中的所有變更都已 undo 時,該緩衝區不再被視為已變更。您可以使用 :q 退出,而無需 <!>。當 undo 幾個變更,然後進行新的變更時,Vim 會在 undo 樹中建立一個分支。這表示您可以回到文字的任何狀態,不會有變更導致文字永遠遺失的風險。undo-tree 當設定 'undofile' 選項時,undo 資訊會儲存在檔案中。這表示您可以退出 Vim,在先前編輯的檔案上啟動 Vim,並 undo 在退出 Vim 之前所做的變更。
圖形使用者介面 (GUI)。gui 包含對 GUI 的支援:選單、滑鼠、捲軸等。您可以定義自己的選單。更好支援 CTRL/SHIFT/ALT 鍵與特殊鍵和滑鼠的組合。支援各種平台,例如 Win32。
多個視窗和緩衝區。windows.txt Vim 可以將螢幕分割成多個視窗,每個視窗編輯不同的緩衝區或同一緩衝區的不同位置。緩衝區仍然可以載入 (和變更),但不會顯示在視窗中。這稱為隱藏緩衝區。已為此功能新增了許多命令和選項。Vim 也可以使用多個標籤頁,每個標籤頁都有一個或多個視窗。帶有標籤的行可以用來快速切換這些頁面。tab-page
語法高亮顯示。:syntax Vim 可以高亮顯示關鍵字、模式和其他內容。這是由許多 :syntax 命令定義的,並且可以高亮顯示大多數語言和檔案類型。包含許多檔案用於高亮顯示最常見的語言,例如 C、C++、Java、Pascal、Makefile、shell 腳本等等。用於高亮顯示的顏色可以使用 :highlight 命令為普通終端機、彩色終端機和 GUI 定義。一個方便的方法是使用 :colorscheme 命令。高亮顯示的文字可以匯出為 HTML。convert-to-HTML 其他可以高亮顯示的項目包括搜尋字串的符合項 'hlsearch'、匹配的括號 matchparen 和游標行和列 'cursorline' 'cursorcolumn'
拼字檢查。spell 當設定 'spell' 選項時,Vim 會高亮顯示拼字錯誤。目前支援約 50 種語言,可以使用 'spelllang' 選項選擇。在原始碼中,只有註解和字串會檢查拼字。
摺疊。folding 一系列的行可以顯示為一個「摺疊」的行。這允許概覽檔案並快速移動文字區塊。可以手動建立摺疊、從檔案的語法、從縮排等建立摺疊。
Diff 模式。diff-mode Vim 可以顯示檔案的兩個版本,並高亮顯示差異。相同的文字部分會被摺疊起來。可以使用命令將文字從一個版本移動到另一個版本。
外掛程式。add-plugin 可以將外掛程式檔案放到正確的目錄中來擴展功能。這是一種輕鬆開始使用其他人編寫的 Vim 腳本的方法。外掛程式可以適用於所有類型的檔案,或特定於檔案類型。套件使這個過程更加容易。packages
非同步通訊和計時器。job-control timer Vim 可以在背景中與其他程序交換訊息。Vim 可以啟動一個作業、與它通訊並停止它。job-control 計時器可以觸發一次或重複觸發,並呼叫函數來執行任何工作。timer
重複一系列命令。q "q{c}" 開始將鍵入的字元記錄到名為 {c} 的暫存器中。後續的 "q" 停止記錄。然後可以使用 "@{c}" 命令執行暫存器。這對於重複複雜的操作非常有用。
彈性的插入模式。ins-special-special 可以在插入模式中使用方向鍵在檔案中移動。就 undo 和 redo 而言,這會將插入分為兩個部分。
可以使用 CTRL-O 執行單個 Normal 模式命令。這幾乎與按下 <Esc>、輸入命令然後執行 a 相同。
Visual 模式。Visual-mode Visual 模式可以用來首先高亮顯示一段文字,然後給出命令來對其執行某些操作。這是一種 (易於使用) 的替代方法,首先給出運算子,然後移動到要操作的文字結尾。vV 用於啟動 Visual 模式。v 對字元起作用,而 V 對行起作用。移動游標以延伸 Visual 區域。它會在螢幕上高亮顯示。透過輸入 "o",可以移動 Visual 區域的另一端。Visual 區域可能會受到運算子的影響:d 刪除 c 更改 y 複製 > 或 < 插入或刪除縮排 ! 透過外部程式篩選 = 透過縮排篩選 : 啟動 Visual 行的 : 命令。gq 將文字格式化為 'textwidth' 欄位 J 合併行 ~ 交換大小寫 u 變為小寫 U 變為大寫
區塊運算子。visual-block 使用 Visual 模式,可以選取文字的矩形區塊。使用 CTRL-V 啟動 Visual 模式。可以刪除區塊 ("d")、複製區塊 ("y") 或變更其大小寫 ("~"、"u" 和 "U")。可以使用 "p" 和 "P" 命令將刪除或複製的區塊放入文字中。
說明系統。:help 說明顯示在視窗中。可以使用常用的命令來移動、搜尋字串等。可以使用標籤在說明檔案中跳轉,就像超文字連結一樣。:help 命令接受一個參數,可以快速跳轉到有關主題的資訊。<F1> 是快速存取說明系統的方式。可以使用 'helpfile' 選項設定說明索引檔案的名稱。
命令列編輯和歷史。cmdline-editing 您可以使用游標鍵在命令列中的任何位置插入或刪除。可以使用向右/向左游標鍵向前/向後移動一個字元。可以使用 Shift + 向右/向左游標鍵向前/向後移動一個單字。可以使用 CTRL-B/CTRL-E 前往命令列的開頭/結尾。(Vi:只能更改該行的最後一個字元) (Vi:按下 <Esc> 時,命令列會被執行。這對大多數人來說是意想不到的;因此在 Vim 中進行了更改。但是,當 <Esc> 是映射的一部分時,命令列會被執行。如果您也想在輸入 <Esc> 時使用 Vi 的行為,請使用 ":cmap ^V<Esc> ^V^M") cmdline-history 命令列會被記住。可以使用向上/向下游標鍵召回先前的命令列。可以將 'history' 選項設定為要記住的行數。命令和搜尋模式有單獨的歷史記錄。
命令列完成。cmdline-completion 在輸入命令列時 (在螢幕的底部),可以輸入 <Tab> 來完成
例子
命令 :e<Tab>
標籤 :ta scr<Tab>
選項 :set sc<Tab>
選項值 :set hf=<Tab>
檔案名稱 :e ve<Tab>
等等。
如果有多個符合項,CTRL-N (下一個) 和 CTRL-P (上一個) 將會瀏覽符合項。<Tab> 的作用類似於 CTRL-N,但會環繞到第一個符合項。
可以將 'wildchar' 選項設定為命令列完成的字元,<Tab> 是預設值。可以在 (不完整的) 通配符後輸入 CTRL-D;將會列出所有符合項。CTRL-A 將會插入所有符合項。CTRL-L 將會插入符合項中最長共同的部分。
插入模式完成。ins-completion 在插入模式中,可以使用 CTRL-NCTRL-P 鍵來完成其他位置出現的單字。i_CTRL-N 輸入 CTRL-X 會進入另一種模式,透過此模式可以完成:i_CTRL-X_CTRL-F 檔案名稱 i_CTRL-X_CTRL-K 來自 'dictionary' 檔案的單字 i_CTRL-X_CTRL-T 來自 'thesaurus' 檔案的單字 i_CTRL-X_CTRL-I 來自 include 檔案的單字 i_CTRL-X_CTRL-L 整行 i_CTRL-X_CTRL-] 來自標籤檔案的單字 i_CTRL-X_CTRL-D 定義或巨集 i_CTRL-X_CTRL-O Omni 完成:專門針對檔案類型等的智慧完成。
長行支援。'wrap' 'linebreak' 如果 'wrap' 選項關閉,長行將不會換行,只會顯示部分內容。當游標移動到未顯示的部分時,畫面會水平捲動。可以使用 'sidescroll' 選項設定最小捲動欄數。可以使用 zhzl 命令來左右捲動。或者,當設定 'linebreak' 選項時,長行會在單字之間斷開。這允許方便地編輯單行段落(例如,當文本稍後讀入 DTP 程式時)。使用 gkgj 命令上下移動游標。
文字格式化。formatting 可以使用 'textwidth' 選項來自動限制行長度。這補充了 Vi 的 'wrapmargin' 選項,該選項不是很有用。gq 運算子可用於格式化一段文字(例如,gqap 格式化當前段落)。文字對齊命令::center:left:right
擴展搜尋模式。pattern 有許多額外的項目可以匹配各種文字項目。例如:"\n" 可用於搜尋模式中以匹配換行符。"x\{2,4}" 匹配 "x" 2 到 4 次。"\\s" 匹配空白字元。
目錄、遠端和壓縮檔瀏覽。netrw Vim 可以瀏覽檔案系統。只需編輯一個目錄。使用通常的命令在列表中移動,然後按 <Enter> 前往游標下的目錄或檔案。這也適用於透過 ftp、http、ssh 等遠端檔案。也可以瀏覽 Zip 和 tar 壓縮檔。tar zip
編輯-編譯-編輯加速。quickfix 可以使用 :make 命令來執行編譯並跳到第一個錯誤。將會解析包含編譯器錯誤訊息的檔案。Vim 會跳到第一個錯誤。
錯誤檔案中的每一行都會掃描檔案名稱、行號和錯誤訊息。可以將 'errorformat' 選項設定為類似 scanf 的字串列表,以處理來自多個編譯器的輸出。
可以使用 :cn 命令跳到下一個錯誤。:cl 列出所有錯誤訊息。還有其他命令可用。'makeef' 選項包含錯誤訊息檔案的名稱。'makeprg' 選項包含使用 :make 命令執行的程式名稱。'shellpipe' 選項包含用於將編譯器的輸出放入錯誤檔案的字串。
在檔案中尋找匹配項。:vimgrep Vim 可以在多個檔案中搜尋模式。這使用進階的 Vim 正規表示式模式,適用於所有系統,並且還可以用於搜尋壓縮檔案。
改進程式碼的縮排。'cindent''cindent' 選項開啟時,會自動調整每行的縮排。主要可以識別 C 語法。可以使用 'cinoptions' 設定各種樣式的縮排。可以使用 'cinkeys' 設定觸發縮排的按鍵。
註解可以自動格式化。可以將 'comments' 選項設定為註解的開始和結束字元。這對於 C 程式碼效果最佳,但也適用於電子郵件(行首的 ">")和其他類型的文字。可以使用 = 運算子重新縮排行。
對於許多其他語言,存在縮排外掛程式來支援自動縮排。30.3
在包含的檔案中搜尋單字。include-search 可以使用 [i 命令在目前和包含的檔案中搜尋游標下單字的匹配項。可以將 'include' 選項設定為描述包含檔案命令的模式(預設用於 C 程式)。[I 命令列出所有匹配項,[_CTRL-I 命令跳到匹配項。[d[D[_CTRL-D 命令執行相同操作,但僅針對 'define' 選項給定的模式匹配的行。
自動命令。autocommand 可以在讀取檔案、寫入檔案、跳到另一個緩衝區等時根據檔案名稱自動執行命令。這對於為 C 程式、文件、純文字、電子郵件等設定選項和映射很有用。這也使得編輯壓縮檔案成為可能。
指令碼和表達式。expression 已新增命令來組成功能強大的指令碼語言。:if 條件執行,例如可用於根據 $TERM 的值設定選項。:while 重複執行多個命令。:for 迴圈處理列表。:echo 印出表達式的結果。:let 為內部變數、選項等賦值。變數類型為數字、字串、列表和字典。:execute 執行由表達式形成的命令。:try 捕捉例外等。請參閱 eval。支援除錯和效能分析。debug-scripts profile 如果這還不夠,則提供 Python 的介面。
Viminfo。命令列歷史記錄、標記和暫存器可以儲存在啟動時讀取的檔案中。這可用於在退出並重新啟動 Vim 後重複搜尋命令或命令列命令。也可以使用 '0 直接跳回上次編輯停止的位置。可以設定 'viminfo' 選項以選擇要儲存在 .viminfo 檔案中的項目。預設為關閉。
滑鼠支援。mouse-using 滑鼠在 GUI 版本、Unix 的 xterm、帶 sysmouse 的 BSD、帶 gpm 的 Linux 和 Win32 中都受到支援。它可用於定位游標、選擇視覺區域、貼上暫存器等。
金鑰名稱的使用。<> key-notation 特殊按鍵現在都有名稱,例如 <Up><End> 等。此名稱可用於映射中,以便輕鬆編輯它們。
編輯二進制檔案。edit-binary Vim 可以編輯二進制檔案。您可以在可執行檔案中變更一些字元,而不會損壞它。Vim 不會移除 NUL 字元(它們在內部表示為 <NL>)。-b 命令列參數,用於開始編輯二進制檔案。'binary' 選項由 -b 設定。防止為檔案中的最後一行新增 <EOL>
多語言支援。multi-lang 可以編輯雙位元組或多位元組編碼的檔案。有 UTF-8 支援,可以同時編輯各種語言,而無需切換字型。UTF-8 訊息和選單提供不同的語言版本。
將游標移動到行外。當設定 'virtualedit' 選項時,游標可以在整個螢幕上移動,即使在沒有文字的地方也是如此。這對於輕鬆編輯表格和圖形很有用。
主頁
命令索引
快速參考