> For the complete documentation index, see [llms.txt](https://dofy.gitbook.io/learn-vim/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dofy.gitbook.io/learn-vim/zh-cn/chapter05.md).

# 第五章：分屏与标签页

先把三个容易混淆的概念分开：

* buffer 是载入内存、正在编辑的文本；
* window 是显示某个 buffer 的视口；
* tab page 是一组 window 的布局。

同一个 buffer 可以同时显示在两个窗口里，一个标签页也可以包含多个窗口。因此，Vim 里的标签页不是普通编辑器中“一个标签对应一个文件”的模型。

## 窗口分屏

工作中经常会遇到这种情况，就是需要参照其他文档编辑当前文档（场景：翻译），或者从 另外一个文档 copy 代码到当前文档（场景：复制 html 元素类名到 css 文档），这时候 就是你最需要分屏的时候。

### 分屏方式

* `:split` 缩写 `:sp` or `Ctrl-w s` 上下分屏
* `:vsplit` 缩写 `:vs` or `Ctrl-w v` 左右分屏
* `:diffsplit` 缩写 `:diffs` diff 模式打开一个分屏，后面可以加上 {filename}

### 窗口跳转

* `Ctrl-w w` 激活下一个窗口
* `Ctrl-w j` 激活下方窗口
* `Ctrl-w k` 激活上方窗口
* `Ctrl-w h` 激活左侧窗口
* `Ctrl-w l` 激活右侧窗口

### 移动分屏

* `Ctrl-w L` 移动到最右侧
* `Ctrl-w H` 移动到最左侧
* `Ctrl-w K` 移动到顶部
* `Ctrl-w J` 移动到底部

*注意：区分大小写。另外，可以将底部的屏幕移动到右侧，实现上下分屏到左右分屏的转 换。*

### 屏幕缩放

* `Ctrl-w =` 平均窗口尺寸
* `Ctrl-w +` 增加高度
* `Ctrl-w -` 缩减高度
* `Ctrl-w _` 最大高度
* `Ctrl-w >` 增加宽度
* `Ctrl-w <` 缩减宽度
* `Ctrl-w |` 最大宽度

> 实践！实践！实践！

> 执行 `:split`，然后在两个窗口中分别滚动。你看到的是同一个 buffer 的两个视口；在 其中一边修改文字，另一边也会同步变化。练习结束后按 `u` 恢复，再用 `Ctrl-w c` 关闭当前窗口。

## 标签页

标签页适合保存不同的窗口布局，例如一个标签页查看代码和测试，另一个标签页查看文档 和日志。单纯切换文件时，通常继续使用[第二章](/learn-vim/zh-cn/chapter02.md)介绍的 buffer 更直接。

### 创建标签页

* `:tabnew` or `:tabedit` 缩写 `:tabe` 打开新标签页
* `Ctrl-w gf` 在新标签页中打开当前光标所在位置的文件名

*注意：`:tabnew` 和 `:tabedit` 后面都可以跟一个 <空格><文件名> 用以在新标签页中 打开指定文件，还可以在 `:` 后面加一个数字，指出新标签页在列表中的位置（从 0 开始 ）。*

### 切换标签页

* `gt` or `:tabnext` 缩写 `:tabn` 下一个标签页（最后一个会循环到第一个）
* `gT` or `:tabprevious` 缩写 `:tabp` 上一个标签页（第一个会循环到最后一个）
* `:tabrewind` 缩写 `:tabr` or `:tabfirst` 缩写 `:tabfir` 到第一个
* `:tablast` 缩写 `:tabl` 到最后一个标签页

### 关闭标签页

* `:tabclose` 缩写 `:tabc` 关闭当前标签页
* `:-tabc` 关闭上一个标签页
* `:+tabc` 关闭下一个标签页
* `:tabonly` 缩写 `:tabo` 关闭其他标签页

> 执行 `:tabnew chapter01.md`，再执行 `:vsplit chapter02.md`。现在用 `gt` 在标签页 之间切换，用 `Ctrl-w w` 在当前标签页的窗口之间切换。最后依次执行 `:close` 和 `:tabclose` 回到本章。

[下一章](/learn-vim/zh-cn/chapter06.md)将介绍块操作。
