doc: 阅读vim相关文档

This commit is contained in:
asahi
2025-07-24 01:26:51 +08:00
parent 2c9278a410
commit e861ac1ece

116
vim/vim.md Normal file
View File

@@ -0,0 +1,116 @@
# vim
## Buffers,Windows,Tabs
在现代的文本编辑器,通常会存在`windows``tabs`两种抽象。但是vim和常用的文本编辑器不同其抽象组成如下
- windows
- tabs
- buffers
### Buffer
buffer是一个内存空间可以向buffer`写文本``编辑文本`。当通过vim打开一个文件后文件的内容就被关联到buffer中当打开3个文件就存在3个buffer。
可以通过如下命令打开多个buffer
```bash
vim file1.txt file2.txt
```
每当通过vim打开一个新文件都会为vim创建一个buffer。
如果想要在多个buffer之间进行切换可以使用如下方式。
#### `:bnext` `:bprevious`
通过`:bnext``:bprevious`命令其支持在多个buffer之间进行切换切换到前一个/后一个buffer。
#### `:buffer {filename}`
通过`:buffer {filename}`的方式,可以切换到`{filename}`关联的buffer。
> filename可以通过`tab`进行自动补全。
#### `:buffer {n}`
通过`:buffer {n}`的形式可以通过数字来进行buffer的跳转。
#### `ctrl + ^`
通过`ctrl + ^`的快捷键组合能够跳转到上次编辑的buffer。
如果想要对查看所有buffer可以通过如下方式
- `:ls`
- `:files`
- `:buffers`
#### `:bdelete`
一旦vim创建了buffer其将会存在于buffer list中。如果想要移除buffer list中的buffer可以通过`:bdelete`的方式移除其支持接收buffer number和file name示例如下
```bash
:bdelete 1
```
```bash
:bdelete file1.txt
```
#### exit vim with all buffers closed
如果存在多个buffer想要关闭所有buffers可以使用如下方式
```bash
:qall
```
关闭所有buffer并且不保存修改
```bash
:qall!
```
保存并关闭所有buffer
```bash
:wqall
```
#### `:e {filepath}`
在当前存在buffer list的同时还想打开新的文件可以通过`:e {filepath}`的命令来实现
```bash
:e ~/f2.txt
```
### windows
window是一个buffer的viewport。和目前主流的编辑器类似vim同样支持打开多个windows在界面同时展示多个buffer的内容。
#### `:split {filename}`
在当前已经存在buffer被展示到window的情况下如果想要同时展示多个window可以使用`:split {filename}`,示例如下:
```bash
# 打开一个文件
vim f1
# 打开f1后此时目前只有一个buffer和一个window如果此时想要再打开一个window
# 打开f2并展示到f1 window的上部分
:split f2
# 执行完上述命令后vim被分割为两个window上面为f2下面为f1
```
#### 切换窗口
如果想要在多个window之间切换焦点可以使用如下快捷键仅在normal模式下
- `ctrl + w + h`:切换到左侧窗口
- `ctrl + w + l`:切换到右侧窗口
- `ctrl + w + j`:切换到下侧窗口
- `ctrl + w + k`:切换到上侧窗口
之后,可以运行如下命令
```bash
:vsplit f3
```
运行之后vim会展示3个窗口上半部分展示`f3, f2`两个窗口,下半部分展示`f1`窗口。
#### 关闭窗口
如果想要关闭当前窗口,可以调用`ctrl + w + c`快捷键,或是通过`:q`命令。`即使关闭window关闭文件的buffer仍然存在于buffers中`
#### split窗口快捷键
- `ctrl + w + s`: 水平方向针对当前buffer打开一个window
- `ctrl + w + v`: 垂直方向对当前buffer打开一个window
- `ctrl + w + c`关闭当前window
- `ctrl + w + o`关闭其他window仅保留当前window
#### 窗口相关命令行
- `:vsplit {filename}`
- `:split {filename}`
- `:new {filename}`