Usr_08

Nvim :help 頁面,由 產生,來源為 原始碼,使用 tree-sitter-vimdoc 解析器。


VIM 使用者手冊 - 作者:Bram Moolenaar
分割視窗
在上下分割的視窗中顯示兩個不同的檔案。或同時檢視檔案中的兩個位置。並排顯示兩個檔案,查看它們之間的差異。所有這些都可以透過分割視窗來實現。
08.1 分割視窗 08.2 在另一個檔案上分割視窗 08.3 視窗大小 08.4 垂直分割 08.5 移動視窗 08.6 所有視窗的指令 08.7 以 diff 模式檢視差異 08.8 其他 08.9 分頁標籤
下一章: usr_09.txt 使用 GUI 前一章:usr_07.txt 編輯多個檔案 目錄:usr_toc.txt

分割視窗

開啟新視窗最簡單的方法是使用以下指令
:split
此指令將螢幕分割成兩個視窗,並將游標留在頂部視窗中
+----------------------------------+
|/* file one.c */                   |
|~                                   |
|~                                   |
|one.c=============================|
|/* file one.c */                   |
|~                                   |
|one.c=============================|
|                                   |
+----------------------------------+
您在這裡看到的是同一個檔案的兩個視窗。帶有「====」的行是狀態列。它顯示關於上方視窗的資訊。(實際上,狀態列會以反白顯示。)這兩個視窗允許您檢視同一個檔案的兩個部分。例如,您可以讓頂部視窗顯示程式的變數宣告,而底部視窗顯示使用這些變數的程式碼。
可以使用 CTRL-W w 指令在視窗之間跳轉。如果您在頂部視窗中,CTRL-W w 會跳到下方的視窗。如果您在底部視窗中,它會跳到第一個視窗。(CTRL-W CTRL-W 的作用相同,以防您稍微晚放開 CTRL 鍵。)

關閉視窗

要關閉視窗,請使用指令
:close
實際上,任何可以退出編輯檔案的指令都有效,例如「:quit」和「ZZ」。但是「:close」可防止您在關閉最後一個視窗時意外退出 Vim。

關閉所有其他視窗

如果您開啟了一大堆視窗,但現在想專注於其中一個視窗,則此指令將很有用
:only
這會關閉所有視窗,除了目前的視窗。如果任何其他視窗有變更,您將會收到錯誤訊息,且該視窗不會被關閉。

08.2 在另一個檔案上分割視窗

以下指令會開啟第二個視窗並開始編輯指定的檔案
:split two.c
如果您正在編輯 one.c,則結果如下
+----------------------------------+
|/* file two.c */                   |
|~                                   |
|~                                   |
|two.c=============================|
|/* file one.c */                   |
|~                                   |
|one.c=============================|
|                                   |
+----------------------------------+
要在新的空白檔案上開啟視窗,請使用此指令
:new
您可以重複使用「:split」和「:new」指令來建立任意數量的視窗。

08.3 視窗大小

「:split」指令可以接受數字參數。如果指定,這將是新視窗的高度。例如,以下指令會開啟一個三行高的新視窗,並開始編輯檔案 alpha.c
:3split alpha.c
對於現有的視窗,您可以透過多種方式變更其大小。當您有可用的滑鼠時,這很容易:將滑鼠指標移動到分隔兩個視窗的狀態列,然後向上或向下拖曳。
要增加視窗的大小
CTRL-W +
要減小視窗的大小
CTRL-W -
這兩個指令都接受一個計數,並將視窗大小增加或減少指定的行數。因此,「4 CTRL-W +」會使視窗高四行。
要將視窗高度設定為指定的行數
{height}CTRL-W _
那就是:數字 {height}CTRL-W,然後是底線(在英文-美國鍵盤上使用 Shift 的 - 鍵)。要使視窗盡可能地高,請使用不帶計數的 CTRL-W _ 指令。

使用滑鼠

在 Vim 中,您可以從鍵盤非常快速地執行許多操作。不幸的是,視窗調整大小指令需要相當多的輸入。在這種情況下,使用滑鼠更快。將滑鼠指標放在狀態列上。現在按下滑鼠左鍵並拖曳。狀態列將會移動,從而使一側的視窗更高,而另一側的視窗更小。

選項

可以將 'winheight' 選項設定為視窗的最小期望高度,將 'winminheight' 設定為硬性最小高度。同樣地,有 'winwidth' 表示最小期望寬度,以及 'winminwidth' 表示硬性最小寬度。當設定 'equalalways' 選項時,Vim 會在關閉或開啟視窗時均分視窗大小。

08.4 垂直分割

「:split」指令會在目前視窗上方建立新視窗。要使視窗顯示在左側,請使用
:vsplit
:vsplit two.c
結果看起來像這樣
+--------------------------------------+
|/* file two.c */   |/* file one.c */  |
|~                    |~                       |
|~                    |~                       |
|~                    |~                       |
|two.c===============one.c=============|
|                                       |
+--------------------------------------+
實際上,中間的 | 線條會以反白顯示。這稱為垂直分隔符。它分隔其左右兩側的兩個視窗。
還有「:vnew」指令,可以在新的空白檔案上開啟垂直分割的視窗。執行此操作的另一種方法
:vertical new
可以在分割視窗的其他指令之前插入「:vertical」指令。這會導致該指令垂直分割視窗,而不是水平分割。(如果該指令沒有分割視窗,則其作用不會改變。)

在視窗之間移動

由於您可以根據需要水平和垂直分割視窗,因此您可以建立幾乎任何視窗的佈局。然後,您可以使用以下指令在它們之間移動
CTRL-W h 移動到左側的視窗 CTRL-W j 移動到下方的視窗 CTRL-W k 移動到上方的視窗 CTRL-W l 移動到右側的視窗
CTRL-W t 移動到頂部視窗 CTRL-W b 移動到底部視窗
您會注意到與移動游標相同的字母。如果您願意,也可以使用游標鍵。移動到其他視窗的更多指令:Q_wi

08.5 移動視窗

您已經分割了一些視窗,但現在它們的位置不正確。那麼您需要一個指令將視窗移動到其他位置。例如,您有三個像這樣的視窗
+----------------------------------+
|/* file two.c */                   |
|~                                   |
|~                                   |
|two.c=============================|
|/* file three.c */                   |
|~                                   |
|~                                   |
|three.c===========================|
|/* file one.c */                   |
|~                                   |
|one.c=============================|
|                                   |
+----------------------------------+
顯然,最後一個視窗應該在頂部。移至該視窗(使用 CTRL-W w),然後輸入此指令
CTRL-W K
這使用大寫字母 K。發生的是,視窗會被移動到最頂部。您會注意到 K 再次用於向上移動。當您有垂直分割時,CTRL-W K 會將目前視窗移動到頂部,並使其佔用整個 Vim 視窗的寬度。如果您的佈局是這樣
+-------------------------------------------+
|/* two.c */  |/* three.c */  |/* one.c */  |
|~              |~              |~            |
|~              |~              |~            |
|~              |~              |~            |
|~              |~              |~            |
|~              |~              |~            |
|two.c=========three.c=========one.c========|
|                                            |
+-------------------------------------------+
然後,在中間視窗 (three.c) 中使用 CTRL-W K 將導致
+-------------------------------------------+
|/* three.c */                                    |
|~                                            |
|~                                            |
|three.c====================================|
|/* two.c */               |/* one.c */            |
|~                       |~                    |
|two.c==================one.c===============|
|                                            |
+-------------------------------------------+
其他三個類似的指令(您現在可能可以猜到這些)
CTRL-W H 將視窗移動到最左側 CTRL-W J 將視窗移動到底部 CTRL-W L 將視窗移動到最右側

08.6 所有視窗的指令

當您開啟多個視窗並且想要退出 Vim 時,您可以分別關閉每個視窗。一個更快的方法是使用這個指令
:qall
這代表「全部退出」。如果任何視窗包含變更,Vim 將不會退出。游標會自動定位到具有變更的視窗中。然後,您可以使用「:write」來儲存變更,或使用「:quit!」來丟棄變更。
如果您知道有視窗包含變更,並且想要儲存所有這些變更,請使用此指令
:wall
這代表「全部寫入」。但實際上,它只會寫入有變更的檔案。Vim 知道寫入未變更的檔案沒有意義。然後,還有「:qall」和「:wall」的組合:「寫入並全部退出」指令
:wqall
這會寫入所有已修改的檔案並退出 Vim。最後,有一個指令可以退出 Vim 並丟棄所有變更
:qall!
請小心,沒有辦法復原此指令!
為所有引數開啟視窗
要使 Vim 為每個檔案開啟一個視窗,請使用「-o」引數啟動它
vim -o one.txt two.txt three.txt
這會導致
+-------------------------------+
|file one.txt                        |
|~                                |
|one.txt========================|
|file two.txt                        |
|~                                |
|two.txt========================|
|file three.txt                        |
|~                                |
|three.txt======================|
|                                |
+-------------------------------+
「-O」引數用於取得垂直分割的視窗。當 Vim 已經在執行時,「:all」指令會為引數清單中的每個檔案開啟一個視窗。「:vertical all」使用垂直分割來執行此操作。

08.7 以 diff 模式檢視差異

有一種特殊的方式可以啟動 Nvim,它會顯示兩個檔案之間的差異。讓我們建立一個「main.c」檔案,並在一行中插入幾個字元。設定 'backup' 選項來寫入此檔案,以便備份檔案「main.c~」將包含檔案的先前版本。在 shell 中輸入此指令,以 diff 模式啟動 Nvim
nvim -d main.c~ main.c
Vim 會啟動,兩個視窗並排顯示。您只會看到您在其中新增字元的行,以及其上方和下方的一些行。
 VV                      VV
+-----------------------------------------+
|+ +--123 lines: /* a|+ +--123 lines: /* a|  <- fold
|  text                     |        text                  |
|  text                     |        text                  |
|  text                     |        text                  |
|  text                     |        changed text          |  <- changed line
|  text                     |        text                  |
|  text                     |        ------------------|  <- deleted line
|  text                     |        text                  |
|  text                     |        text                  |
|  text                     |        text                  |
|+ +--432 lines: text|+ +--432 lines: text|  <- fold
|  ~                     |        ~                  |
|  ~                     |        ~                  |
|main.c~==============main.c==============|
|                                          |
+-----------------------------------------+
(此圖片不會顯示醒目提示,請使用「nvim -d」進行顯示。)
未修改的行已摺疊成一行。這稱為封閉式摺疊。它們在圖片中以「<- fold」表示。因此,頂部的單個摺疊行代表 123 個文字行。這些行在兩個檔案中都相同。標記為「<- changed line」的行會醒目提示,而插入的文字會以另一種顏色顯示。這清楚地顯示了兩個檔案之間的差異。已刪除的行在 main.c 視窗中以「---」顯示。請參閱圖片中的「<- deleted line」標記。這些字元並非實際存在。它們只是填補 main.c,使其顯示的行數與其他視窗相同。

摺疊欄

每個視窗的左側都有一個背景稍有不同的欄。在上面的圖片中,這些以「VV」表示。您會注意到在每個封閉式摺疊前面都有一個加號字元。將滑鼠指標移至該加號,然後按一下滑鼠左鍵。摺疊將會開啟,您可以查看它包含的文字。摺疊欄包含一個用於開啟摺疊的減號。如果您按一下此 -,摺疊將會關閉。顯然,這僅在您有可用的滑鼠時才有效。您也可以使用「zo」來開啟摺疊,並使用「zc」來關閉它。

VIM 中的差異

從 Vim 內部也可以執行另一種以 diff 模式啟動的方式。編輯「main.c」檔案,然後進行分割並顯示差異
:edit main.c
:vertical diffsplit main.c~
「:vertical」指令用於使視窗垂直分割。如果您省略此指令,則會得到水平分割。
如果您有修補程式或差異檔案,則可以使用第三種方式來啟動 diff 模式。首先編輯修補程式套用的檔案。然後告訴 Vim 修補程式檔案的名稱
:edit main.c
:vertical diffpatch main.c.diff
警告: 補丁檔案必須只包含一個針對您正在編輯的檔案的補丁。否則,您會收到大量的錯誤訊息,並且某些檔案可能會被意外地修補。修補只會在 Vim 中檔案的複本上進行。您硬碟上的檔案將保持未修改(直到您決定寫入檔案為止)。

捲動綁定

當檔案有較多變更時,您可以像平常一樣捲動。Vim 會嘗試讓兩個視窗從相同的位置開始,以便您可以輕鬆地並排查看差異。如果您暫時不想要這樣,請使用此命令
:set noscrollbind

跳至變更處

當您以某種方式停用了折疊時,可能會難以找到變更之處。使用此命令向前跳至下一個變更處
]c
要反向移動,請使用
[c
在前面加上計數可以跳得更遠。

移除變更

您可以將文字從一個視窗移動到另一個視窗。這會移除差異或新增差異。Vim 並非在所有情況下都會保持高亮顯示更新。要更新它,請使用此命令
:diffupdate
要移除差異,您可以將高亮區塊中的文字從一個視窗移動到另一個視窗。以上述的「main.c」和「main.c~」範例為例。將游標移動到左側視窗,移到在另一個視窗中被刪除的行。現在輸入此命令
dp
變更將會被移除,方法是將目前視窗的文字放入另一個視窗。「dp」代表「diff put」。您也可以反向操作。將游標移動到右側視窗,移到插入「changed」的行。現在輸入此命令
do
現在變更將會被移除,方法是從另一個視窗取得文字。由於現在沒有剩餘的變更,Vim 會將所有文字放入一個關閉的折疊中。「do」代表「diff obtain」。「dg」會更好,但它已經有不同的含義(「dgg」會從游標刪除到第一行)。
有關 diff 模式的詳細資訊,請參閱 diff-mode

08.8 其他

可以使用 'laststatus' 選項來指定最後一個視窗何時具有狀態列
0 永不顯示;1 僅當有分割視窗時顯示(預設);2 永遠顯示;3 在底部有一個全域狀態列,而不是每個視窗一個狀態列
許多編輯另一個檔案的命令都有分割視窗的變體。對於命令列命令,這是通過在前面加上「s」來完成的。例如:「:tag」跳到標籤,「:stag」分割視窗並跳到標籤。對於 Normal 模式命令,會在前面加上 CTRL-WCTRL-^ 跳到備用檔案,CTRL-W CTRL-^ 分割視窗並編輯備用檔案。
可以設定 'splitbelow' 選項,使新視窗出現在目前視窗下方。可以設定 'splitright' 選項,使垂直分割的視窗出現在目前視窗的右側。
分割視窗時,可以在前面加上修飾符命令,以指定視窗出現的位置
:leftabove {cmd} 在目前視窗的左側或上方 :aboveleft {cmd} 同上 :rightbelow {cmd} 在目前視窗的右側或下方 :belowright {cmd} 同上 :topleft {cmd} 在 Vim 視窗的頂部或左側 :botright {cmd} 在 Vim 視窗的底部或右側

08.9 分頁標籤

您會注意到視窗永遠不會重疊。這意味著您很快就會用完螢幕空間。這個問題的解決方案稱為分頁標籤。
假設您正在編輯「thisfile」。要建立新的分頁標籤,請使用此命令
:tabedit thatfile
這將在佔用整個 Vim 視窗的視窗中編輯檔案「thatfile」。您會注意到頂部有一個包含兩個檔案名稱的橫條
+----------------------------------+
| thisfile | /thatfile/ __________X|    (thatfile is bold)
|/* thatfile */                           |
|that                                   |
|that                                   |
|~                                   |
|~                                   |
|~                                   |
|                                   |
+----------------------------------+
您現在有兩個分頁標籤。第一個有一個用於「thisfile」的視窗,第二個有一個用於「thatfile」的視窗。這就像兩頁堆疊在一起的頁面,每頁都伸出一個標籤顯示檔案名稱。
現在使用滑鼠按一下頂部行中的「thisfile」。結果是
+----------------------------------+
| /thisfile/ | thatfile __________X|    (thisfile is bold)
|/* thisfile */                           |
|this                                   |
|this                                   |
|~                                   |
|~                                   |
|~                                   |
|                                   |
+----------------------------------+
因此,您可以透過按一下頂部行中的標籤來在分頁標籤之間切換。如果您沒有滑鼠或不想使用滑鼠,可以使用「gt」命令。助記詞:Goto Tab。
現在讓我們使用命令建立另一個分頁標籤
:tab split
這會建立一個新的分頁標籤,其中有一個視窗正在編輯與我們所在視窗相同的緩衝區
+-------------------------------------+
| thisfile | /thisfile/ | thatfile __X|   (thisfile is bold)
|/* thisfile */                              |
|this                                      |
|this                                      |
|~                                      |
|~                                      |
|~                                      |
|                                      |
+-------------------------------------+
您可以在任何開啟視窗的 Ex 命令之前加上「:tab」。視窗將在新分頁標籤中開啟。另一個範例
:tab help gt
將在新分頁標籤中顯示「gt」的說明文字。
您可以使用分頁標籤執行的其他一些操作
使用滑鼠按一下最後一個標籤後的空白處 將選擇下一個分頁標籤,與「gt」相同。
使用滑鼠按一下右上角的「X」 將關閉目前的分頁標籤。除非目前的分頁標籤中有未儲存的變更。
使用滑鼠在頂部行中按兩下滑鼠 將建立新的分頁標籤。
「tabonly」命令 關閉除目前分頁標籤外的所有分頁標籤。除非其他分頁標籤中有未儲存的變更。
有關分頁標籤的更多資訊,請參閱 tab-page
下一章:usr_09.txt 使用 GUI
版權:請參閱 manual-copyright vim:tw=78:ts=8:noet:ft=help:norl
主要
命令索引
快速參考