日期:2023年12月2日标签:Developer

vim buffer #

如果你使用 (neo)vim 作为你的编辑器,首先你必须理解 buffer、tab 和 window 的概念。

  • buffer: 当用 vim 打开一个文件编辑时,编辑的对象并不是源文件,vim 会先将文件加载到内存中,用户编辑的数据存储再 buffer 中,使用 :w 可以将 buffer 中的数据写入,使用 :q! 表示退出并丢弃 buffer 中的内容。
  • window: window 就是 buffer 的视口,用于显示 buffer 的内容,一个 buffer 可以显示在多个 window 中,也可以多个 window 显示不同的 buffer
  • tab: tab 页是一组 window

什么是 buffer #

每个 buffer 有一个特殊的数字表示,并且有可以有三种状态:active、inactive 和 hidden。

  • active:显示在窗口中的 buffer
  • hidden: 没有显示在窗口中的 buffer
  • inactive:没有显示,并且没有任何东西,没有与某个文件进行绑定

如果此时有一个处于 hidden 状态,并且内容已经被更改的 buffer,使用 :q 命令退出 neovim 时,neovim 会给出一个错误信息,指引我们可以将 buffer 中的内容写入(:wq)或者退出不写入(:q)。

命令 #

  • :buffer 或者 :ls: 列出所有 buffer, 每个 buffer 都有一个数字标识
# `:ls` 列出所有 buffer
# a 表示 active buffer
# 每个 buffer 有一个数字标识
:ls
  1 %a + "docs/开发者笔记/vim buffer.md" line 29
 13 #h   "~/projects/program/site-generator/docs/开发者笔记/Vscode Neovim.md" line 1
  • :b <number>: 显示指定数字代表的 buffer
  • :b <partial name>:显示指定文件名称代表的 buffer,支持模糊匹配
  • :new:在水平 split window 创建一个 buffer
  • :vnew: 在竖直 split window 创建一个 buffer
  • :enew: 在新的 window 创建一个 buffer
  • :bp: 切换到前一个 buffer
  • :bn: 切换到后一个 buffer
  • :bf: 切换到第一个 buffer
  • :bl: 切换到最后一个 buffer
  • :bd: 移除一个 buffer
  • :w: 将当前 buffer 中的内容写入文件,保存
  • :q: 退出当前 buffer,如果 buffer 中有未保存的内容,退出失败
  • :q!: 强制退出当前 buffer,不保存 buffer 中的内容
  • :wa: 将所有 buffer 中的变更写入文件,并保存
  • :xa: 将所有 buffer 中的变更写入文件,保存并退出
  • :qa!: 退出,并丢弃 buffer 中的变更
  • :qa: 退出所有 buffer,如果有未保存的 buffer,退出失败

插件 #

1、bufferline

以顶部 tab 的形式显示打开的 buffer。并且显示 buffer 的状态,buffer 是否未保存。

2、telescope

支持文件搜索,文件内容搜索和 buffer 搜索。

(完)

目录