Files
rikako-note/vim/vim.md
2025-07-24 01:27:14 +08:00

117 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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}`