Vim 缓冲 buffer详解

回忆上次

查看手册📕

  • man vim
    • 可以看到vim可以有多个参数
    • terminal里面直接运行
      • vim oeasy.txt o2z.txt
    • 这样就会打开两个文件
  • 每一个打开的文件是一个buffer缓冲区
    • 可以在vim中用:buffers查看到目前打开的文件
    • 可以:h buffers查看手册

图片描述

上下切换缓存buffers

  • :buffers 可以查看所有缓冲
    • :ls也可以查看所有缓冲
    • 注意不是 :!ls
    • !是执行外部命令ls
  • 可以查看手册:h :ls
    • 可以通过:bn[ext],选择下一个buffer
    • 可以通过:bprev[ious],选择上一个buffer
    • 也可以通过:bN[ext],选择上一个bufer

图片描述

打开指定缓存buffer

  • 可以用b[uffer]1b2 直接切入指定的 buffer
  • 也可以用文件名,比如b[uffer] oeasy.txt
  • 可以用bf[irst],打开第一个buffer
  • 可以用bl[ast],打开最后一个buffer
  • 你可以尝试复制粘贴一些内容
    • 然后跨文件进行复制粘贴操作
    • 并回忆一下多寄存器的复制粘贴

buffers细节

图片描述

  • 可以在打开帮助手册的情况下,:ls!,看到不在缓冲列表的缓冲
    • + 有修改未保存内容
    • - 可修改标签关闭
    • = 只读缓冲区
    • a 活跃缓冲区,当前的缓存区
    • u 没有在列表里面的缓冲区
    • h 隐藏缓冲区
    • x 有读取错误的缓冲区
    • % 当前缓冲区
    • #swap替换 文件的缓冲区

强制跳转buffer

  • 当我想跳转的时候,如果当前文件没有保存,他会不允许跳转
    • 只能先:w保存
    • 然后再跳转
    • 也可以用:wn
      • write
      • next
  • 如果我想强行跳转
    • :b!2
    • 这样当前文件没有直接保存到硬盘里,但swap中有
    • 如果想:b2的时候自动保存
    • 需要:set autowrite
    • 可以:h autowrite查看手册
  • 也可以不保存强行退出当前buffer
    • :q!
  • 甚至不保存强行退出所有buffer
    • :qall!
    • 也可以保存所有未保存的文件:wall
    • 全部保存并退出:wqall
  • 回忆一下上次提到的
    • :saveas oeasy.txt
    • :w >> o2z.txt

hidden的作用

  • terminalvim 两个文件ab
    • vim a b
    • a里面进行了修改
    • 如果这个时候我想:b2切到第2buffer
    • 他会提示我要保存当前这个a
  • 如果设置了:set hidden,这个可以直接切换
    • a存在于swap已经修改
    • 还没w的状态
    • 注意这个和autowrite不同
    • :set autowrite`
      • 切换的时候自动保存
  • :ls可以看到两个都有+(未保存标记)
    • aactive
    • hhidden
  • 这个时候就:wall
    • 可以把这两个一起保存

图片描述

跨文件跳转

  • :marks 可以看到各种 mark标记

图片描述

  • `"是上次光标离开此缓存buffer时候的位置
  • `.是上次编辑此缓存buffer发生的位置
  • 也可以用大写字母定义跨文件标记
    • mA 定义标记
    • "A 跳转到标记

跳转列表

  • 在你跳来跳去的时候

  • 形成了一个跳转列表

    • :jump
  • 可以来回来去跳跃

    • CTRL+O 上一个
    • CTRL+I 下一个

图片描述

  • 如果我想在不同的buffer中使用不同的参数,应该怎么做呢?

本地开关

图片描述

  • setlocal 本地开关
  • :set ruler
    • 全局的标尺开关打开
  • :setlocal ruler
    • 只打开当前buffer的ruler

总结

  • 我们这次了解了缓冲区buffer

  • ls可以查看buffer,如下是buffer缓冲的一些flag

    • + 有修改未保存内容
    • - 可修改标签关闭
    • = 只读缓冲区
    • a 活跃缓冲区
    • u 没有在列表里面的缓冲区
    • h 隐藏缓冲区
    • x 有读取错误的缓冲区
    • % 当前缓冲区
    • #swap替换文件的缓冲区
  • 可以在buffer跳转

    • 可以通过bn[ext],选择下一个buffer
    • 可以用b[uffer1]b2进入指定的 buffer
    • 也可以用文件名,比如b[uffer] oeasy.txt
    • 可以用bf[irst],打开第一个buffer
    • 可以用bl[ast],打开最后一个buffer
  • 不保存也可以跳转

    • 设置 hidden
  • 跳转的时候自动保存

    • 设置 autowrite
  • 可以用大写字母设置跨文件标记mark

    • mA 添加标记
    • 'A 跳转到标记
  • 关于强行跳转和保存退出

    • 强制退出当前窗口 :q!
    • 不保存强行退出所有buffer :qall!
    • 保存所有未保存的文件:wall
    • 全部保存并退出:wqall
  • vim中打开的两个文件缓存buffer

  • 可以放到两个窗口里面同时查看吗?🤔

  • 下次再说 👋

教程来源于Github,感谢overmind1980大佬的无私奉献,致敬!

技术教程推荐

硅谷产品实战36讲 -〔曲晓音〕

Linux性能优化实战 -〔倪朋飞〕

程序员的数学基础课 -〔黄申〕

MongoDB高手课 -〔唐建法(TJ)〕

摄影入门课 -〔小麥〕

人人都能学会的编程入门课 -〔胡光〕

大厂晋升指南 -〔李运华〕

代码之丑 -〔郑晔〕

手把手带你搭建秒杀系统 -〔佘志东〕