From e861ac1ecea909abf3230c14335298e355e0ef09 Mon Sep 17 00:00:00 2001 From: asahi Date: Thu, 24 Jul 2025 01:26:51 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E9=98=85=E8=AF=BBvim=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vim/vim.md | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 vim/vim.md diff --git a/vim/vim.md b/vim/vim.md new file mode 100644 index 0000000..c11c253 --- /dev/null +++ b/vim/vim.md @@ -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}` +