---
sidebar_position: 10
tags: [Programming, Vim]
---

# Buffer

| 命令                           | 作用             |
| :----------------------------- | :--------------- |
| `:b{bufferNumber/bufferName}`  | 跳转至指定缓冲区 |
| `:bd{bufferNumber/bufferName}` | 删除指定缓冲区   |

## Search

Built-in fuzzy file search `:find` or `:tabnew`

```vim
set nocompatible
set number

syntax on
filetype plugin indent on

" :find filepath
" :tabnew filepath
" :tabp :tabn
" :b partOfFilepath
" :ls
set path+=**
set wildmenu
set wildmode=list:longest,full
```

`:ls` to list opened file, `:b` to jump to specific file

## Files

| 命令       | 作用                                       |
| :--------- | :----------------------------------------- |
| `<C-g>`    | 显示当前文件名、行号、列号、文件状态等信息 |
| `:f[ile]!` | 显示或设置当前缓冲区的文件名               |
| `:w[rite]` | 把缓冲区内容写入磁盘                       |
| `:e[dit]!` | 把磁盘文件内容读入缓冲区(即回滚所做修改)   |
| `:qa[ll]!` | 关闭所有窗口,摒弃修改而无需警告            |
| `:wa[ll]!` | 把所有改变的缓冲区写入磁盘                 |

## File Explorer

| Ex 命令       | 作用                                      |
| :------------ | :---------------------------------------- |
| `:edit ./:e.` | 打开文件管理器,并显示当前工作目录         |
| `:Explore/:E` | 打开文件管理器,并显示活动缓冲区所在的目录 |

## Window

:::tip

```vim
:h window-moving
```

:::

1. Create:

| 命令               | 作用                                        |
| :----------------- | :------------------------------------------ |
| `<C-w>s`           | 水平切分当前窗口, 新窗口仍显示当前缓冲区    |
| `<C-w>v`           | 垂直切分当前窗口, 新窗口仍显示当前缓冲区    |
| `:sp[lit] {file}`  | 水平切分当前窗口, 并在新窗口中载入 `{file}` |
| `:vsp[lit] {file}` | 垂直切分当前窗口, 并在新窗口中载入 `{file}` |

2. Switch:

| 命令                | 作用             |
| :------------------ | :--------------- |
| `<C-w>w/<C-w><C-w>` | 在窗口间循环切换 |
| `<C-w>h`            | 切换到左边的窗口 |
| `<C-w>j`            | 切换到下边的窗口 |
| `<C-w>k`            | 切换到上边的窗口 |
| `<C-w>l`            | 切换到右边的窗口 |

3. Resize:

| 命令                | 作用                               |
| :------------------ | :--------------------------------- |
| `<C-w>=`            | 使所有窗口等宽、等高               |
| `<C-w>_`            | 最大化活动窗口的高度               |
| `<C-w>\|`           | 最大化活动窗口的宽度               |
| `[N]<C-w>_`         | 把活动窗口的高度设为 `[N]` 行      |
| `[N]<C-w>\|`        | 把活动窗口的宽度设为 `[N]` 列      |
| `:windo lcd {path}` | 设置当前标签页的所有窗口的工作目录 |

4. Close:

| Ex 命令    | Normal 命令 | 作用                            |
| :--------- | :---------- | :------------------------------ |
| `:clo[se]` | `<C-w>c`    | 关闭活动窗口                    |
| `:on[ly]`  | `<C-w>o`    | 只保留活动窗口,关闭其他所有窗口 |

## Tabs

1. Create and close:

| 命令                    | 作用                                 |
| :---------------------- | :----------------------------------- |
| `:tabe[dit] {filename}` | 在新标签页中打开 `{filename}`        |
| `<C-w>T`                | 把当前窗口移到一个新标签页           |
| `:tabc[lose]`           | 关闭当前标签页及其中的所有窗口       |
| `:tabo[nly]`            | 只保留活动标签页, 关闭所有其他标签页 |

2. Switch:

| Ex 命令          | Normal 命令 | 作用                        |
| :--------------- | :---------- | :-------------------------- |
| `:tabn[ext] {N}` | `{N}gt`     | 切换到编号为 `{N}` 的标签页 |
| `:tabn[ext]`     | `gt`        | 切换到下一标签页            |
| `:tabp[revious]` | `gT`        | 切换到上一标签页            |

3. Reorder:

```vim
" N 为 0 时,当前标签页移至首;N 省略时,至尾
:tabmove [N]
```
