Vim 的緩沖區(qū)與多文件編輯
下圖中包含了 Vim 中的 buffer、窗口、標(biāo)簽的關(guān)系。初學(xué)者會(huì)對(duì)這三個(gè)概念容易混淆。下面幾節(jié)內(nèi)容我們會(huì)依次為大家講解。本節(jié)我們會(huì)首先講解下 buffer(緩沖區(qū))的概念。
A buffer is an area of Vim’s memory used to hold text read from a file. In addition, an empty buffer with no associated file can be created to allow the entry of text. –vim.wikia ——官網(wǎng)
這里引用的是官網(wǎng)一段對(duì)于 Vim 緩沖區(qū)的解釋。說白了,buffer 就是 Vim 開辟的一塊內(nèi)存,用于存放從文件中讀取的文本內(nèi)容。
1. 緩沖區(qū)
我們?cè)诰庉嬑募r(shí)候,本質(zhì)上其實(shí)是文件在內(nèi)存的映像。就是我們說的緩沖區(qū)。而文件是需要存儲(chǔ)在磁盤上的。所以我們編輯完文件后通過 :w 寫入磁盤后才叫文件。
buffer 有三種狀態(tài):
- active: 這種狀態(tài)buffer 顯示在當(dāng)前窗口。
- hidden: 這種狀態(tài)buffer是隱藏不顯示的。
- inactive: 這種狀態(tài)buffer 既不顯示也不包含任何東西。
1.1 緩沖區(qū)列表
我們可以同時(shí)"編輯多個(gè)文件(緩沖區(qū))",我們可以在這些緩沖區(qū)中切換使用。
我們可以通過三種命令展示緩沖區(qū)列表:
- :files
- :buffers
- :ls
:buffers
1 %a "main.tf" line 1
2 "jmx_exporter.json" line 0
3 "bind_exporter.json" line 0
:ls
1 %a "main.tf" line 1
2 "jmx_exporter.json" line 0
3 "bind_exporter.json" line 0
:files
1 %a "main.tf" line 1
2 "jmx_exporter.json" line 0
3 "bind_exporter.json" line 0
這里可以看到三個(gè)命令結(jié)果都一樣的。我們具體看下結(jié)果展示各個(gè)部分的意思。
第一列 | 第二列 | 第三列 | 第四列 |
---|---|---|---|
緩沖區(qū)序列號(hào) | 指示狀態(tài) | 文件名 | 光標(biāo)位置 |
這里有點(diǎn)難理解的是指示狀態(tài):
- - 只讀緩沖區(qū)
- a 活動(dòng)緩沖區(qū),當(dāng)前顯示在屏幕上的
- h 隱藏緩沖區(qū)
- % 當(dāng)前的緩沖區(qū)
- # 交換緩沖區(qū)
- + 已經(jīng)更改的緩沖區(qū)
1.2 緩沖區(qū)列表操作
指令 | 含義 |
---|---|
:bp[revious] | 上一個(gè)緩沖區(qū) |
:bn[ext] | 下一個(gè)緩沖區(qū) |
:bf[irst] | 到第一個(gè)緩沖區(qū) |
:bl[ast] | 到最后一個(gè)緩沖區(qū) |
:buffer Nubmer/File_name | 指定緩沖區(qū) |
:ball | 編輯所有緩沖區(qū) |
:badd add.txt | 增加一個(gè)緩沖區(qū) |
:bdelete add.txt | 刪除一個(gè)緩沖區(qū) |
:bufdo %s/pattern/replace/ge | update | 多buffer查找替換 |
下面我會(huì)依次演示上面的操作:
1.2.1 移動(dòng)操作
我們先來看下緩沖區(qū)如何進(jìn)行移動(dòng)操作:
1.2.2 增刪操作
這里我們演示一下如何增加或刪除一個(gè)緩沖區(qū):
2. 小結(jié)
以上就是 Vim buffer 內(nèi)容講解。這個(gè)會(huì)和之后的標(biāo)簽概念相似??梢院?jiǎn)單理解為 buffer 主內(nèi)(內(nèi)部表示),標(biāo)簽主外(外部窗口布局展示)。初學(xué)者會(huì)容易混淆具體會(huì)在后面標(biāo)簽部分講解。