網(wǎng)站建設規(guī)范想做個網(wǎng)絡推廣
Vim學習筆記
- 系列筆記鏈接
- Ch02 Buffers, Windows, Tabs
- Buffers
- 什么是buffer
- 查看所有buffer
- buffer之間的切換
- 刪除buffer
- 退出所有窗口
- Windows
- 窗口的創(chuàng)建
- 窗口切換快捷鍵
- 其他快捷鍵
- Tabs
- 什么是tab
- tab相關(guān)命令
- window和buffer結(jié)合的3D移動
- 小結(jié)
系列筆記鏈接
Ch00,Ch01
Ch02 Buffers, Windows, Tabs
在.vimrc
配置文件中加入set hidden
,可以隱藏一些提示信息,比如切換不同的緩存區(qū)buffer時,未保存當前緩存區(qū)的內(nèi)容,Vim會提示先保存文件。隱藏提示信息可以使切換操作更流暢。
Buffers
什么是buffer
緩存區(qū)buffer是一個內(nèi)置的內(nèi)存空間,可以在其中寫入和編輯文本。Vim中每打開一個新文件,其數(shù)據(jù)都會關(guān)聯(lián)到一個獨立的buffer。
比如通過Vim打開file1.txt,此時Vim關(guān)聯(lián)的就是file1.txt的buffer:
vim file1.txt
同時打開多個文件時,Vim也會為這些文件創(chuàng)建獨立的buffer,默認展示的是第一個文件的buffer:
vim file1.txt file2.txt
查看所有buffer
在命令行模式下輸入:buffers
(或:ls
、:files
),Vim窗口底端會列出當前打開的所有buffer。
buffer之間的切換
:buffers
輸出結(jié)果中,每一行第一列標識了每個buffer的編號(按文件打開的順序,從1開始計數(shù)),第二列表示buffer的狀態(tài),%a
表示Vim當前所處的buffer,第三列就是每個buffer對應的文件,最后一列是每個buffer中光標所處的位置(行)。
通過:buffer+n
的方式可以切換到第n個buffer,比如:buffer2
可以切換到file2.txt的buffer。
其他buffer切換命令:
:bnext # 轉(zhuǎn)到下一個buffer,或者快捷鍵Ctrl + I
:bprevious # 轉(zhuǎn)到上一個buffer,或者快捷鍵Ctrl + O
:buffer + 文件名 # 轉(zhuǎn)到指定文件的buffer
此外,Ctrl + ^
可以切換到前一次編輯的buffer中。
刪除buffer
刪除指定的buffer的兩種方式(命令行模式下):
:delete n # 根據(jù)編號刪除
:delete filename # 根據(jù)文件名刪除
退出所有窗口
同時打開多個buffer時,可以通過以下指令退出所有buffer(命令行模式下):
:qall # 直接退出所有buffer
:qall! # 感嘆號強制退出所有buffer
:wqall # 先保存再退出所有buffer
Windows
窗口的創(chuàng)建
窗口window是展示緩存區(qū)buffer內(nèi)容的媒介,可以類比于普通編輯器的窗口。Vim中也可以同時打開多個窗口,包括對同一個buffer打開多個窗口,以及不同的buffer用不同的窗口打開。
結(jié)合buffer和window兩個概念,當我們用Vim打開一個文件時,比如vim file1.txt
,打開的是file1.txt的buffer,通過一個窗口查看、編輯這個buffer;在file1.txt的基礎上,運行:split file2.txt
,會在file1的窗口之上打開一個新的窗口,顯示file2的buffer,這樣就用不同的窗口打開了不同的buffer。
:split
是將窗口縱向排列,而:vsplit
則是將多個窗口橫向排列,比如在兩個窗口的基礎上繼續(xù)執(zhí)行:vsplit file3.txt
,就會得到第3個窗口:
執(zhí)行vsplit前處于file1的窗口中,vsplit會在當前窗口的左側(cè)打開新的窗口。
窗口切換快捷鍵
Ctrl + W + H # 將光標移動到左側(cè)的窗口
Ctrl + W + J # 下
Ctrl + W + K # 上
Ctrl + W + L # 右
PS:說實話這個不是很好操作,初學不好記的同時,手指靈活度還差點,只能說熟能生巧,但我現(xiàn)在不熟,并且是差點玩壞鍵盤的程度…
其他快捷鍵
Ctrl + W + V # 打開一個新的垂直窗口
Ctrl + W + S # 打開一個新的水平窗口
Ctrl + W + C # 關(guān)閉一個窗口(當前)
Ctrl + W + O # 除了當前窗口,關(guān)閉其他所有窗口
實際操作時:
Ctrl + W + V
無法指定打開的窗口對應哪個buffer,會直接為當前光標所處buffer打開一個新的垂直窗口;
Ctrl + W + S
有個bug,這樣操作之后容易鎖定終端的操作,這之后無論按什么都沒有反應,我還不知道做錯了什么,只能強制殺死該進程;
嘗試Ctrl + W + C
時同樣出現(xiàn)終端“死機”的狀態(tài),于是開始想是不是模式切換的問題,這幾個快捷鍵操作的實際效果還有待探索(結(jié)合window幫助文檔:h window
)
- 還有待探索的window快捷鍵操作
對比起來,在命令行模式下直接輸入指令更直觀可控,但教程中明確的指令只有split、vsplit和new(:qa
退出所有窗口),不如快捷鍵豐富。
Tabs
什么是tab
熟悉Linux環(huán)境和終端命令,對Tab應該不陌生,常用Tab鍵進行文件名、路徑補全,Vim中也可以在輸入命令時使用Tab補全文件名。但這里說的Tabs,指窗口的集合(a collection of windows),類似瀏覽器新開一個標簽頁,稱之為tab。在Vim中,通過:tabnew xxx
打開一個tab,tab的形式也和瀏覽器標簽頁類似,好比不創(chuàng)建新的終端窗口,而是在同一個終端窗口中新開了一個Vim終端。window讓我們在同一個Vim終端中打開不同的文件,每個tab之下可以有不同的window布局。
tab相關(guān)命令
在命令行模式下:
:tabnew file.txt # 打開一個新的tab
:tabclose #關(guān)閉當前tab
:tabnext # 打開下一個tab,或使用快捷鍵gt(注意不是命令行輸入)
:tabprevious # 打開前一個tab,或使用快捷鍵gT
:tablast # 打開最后一個tab
:tabfirst # 打開第一個tab
PS:其實只有快捷鍵gt已經(jīng)足夠在不同的tab之間切換,因為在最后一個tab執(zhí)行gt
之后會到第一個tab,很難想象怎么打出gT
的快捷鍵?
在啟動Vim時同時打開多個tab(-p
參數(shù)):
vim -p file1 file2 file3
同樣可以通過qa
直接退出所有tab。
window和buffer結(jié)合的3D移動
我們可以在一個終端(可以理解為一個tab)中打開多個window,每個window又可以包含多個buffer,窗口之間的切換可以類比于在一個X-Y平面中上下左右移動,而同一個窗口中不同buffer的切換可以類比于在Z軸上移動,因此結(jié)合使用window和buffer時,就好像在一個3D空間移動。
小結(jié)
作者介紹了他對Vim中這幾個概念的用法:一般來說,在同一個窗口中打開多個buffer(對應不同的文件),可以方便進行文件切換;打開多個窗口則是為了便于查看/對比等操作,而tab則是為了區(qū)分不同的并行任務。