Blog icon indicating copy to clipboard operation
Blog copied to clipboard

VIM之操纵缓冲区列表

Open vonzhou opened this issue 5 years ago • 0 comments

引子

昨天遇到了一个奇怪的问题,一条在Sublime里面看着十分正常的SQL语句,执行了也是正常的,导出的Insert语句也是看着没毛病的,但是在查询出来,传递到下游的时候,说多了一个乱码。WTF,然后就开始了排查, 既然SQL语句没有问题,工程里面用到了mybatis mapper,然后就在查询出来的地方打印日志,发现的确查询出来有空格,此时甚至怀疑DB的问题(多么naive)。然后我就想为啥偏偏这个column有问题? 把这个column缓存其他的数字,是OK的,那么原本的数字有何问题呢?因为是集成测试环境无法执行SQL,每次都是工单执行的,这一次为了复现直接登mysql客户端,贴入SQL语句,在terminal上看的很清晰就是在这个数字后面多了个不可见字符。在sublime里面试了很多方法看不出来是啥,最后用vim打开,一目了然。

这个不可见字符就是 <202c>。

经验总结:

  • 这个数字是我从一个富文本(Excel)地方拷贝到文本编辑器的,后面这里要注意。
  • 准备推到线上的配置,dev一定要验证一遍,像这种问题谁能预料到?
  • 还是VIM大法好!

正文

VIM可以同时打开多个文件,缓冲区(Buffer)列表记录了本次编辑会话中打开的所有文件,”缓冲区“意味着我们编辑的是文件在内存中的映像。

同时打开多个文件

➜  ~ vim a.txt b.txt c.txt d.txt

此时VIM会打个多个文件(缓冲区),窗口显示的是第一个文件。

展示缓冲区列表

: ls 命令会列出此次打开的缓冲区列表。

  1 #    "a.txt"                        line 1
  2 %a   "b.txt"                        line 1
  3      "c.txt"                        line 0
  4      "d.txt"                        line 0

%符号表名当前窗口展示的文件, #表示上次从这个文件轮换过来。

切换文件(缓冲区)

: bnext 会切换到下一个缓冲区。

Ctrl + ^ 可以在当前文件和轮换文件(#指示的)快速切换。

:bprev bnext 在列表中正向、反向移动一项。

:first :blast 分别跳到列表的第一个、最后一个文件。

:buffer N 直接根据编号跳到对应的文件。

删除缓冲区

一般使用的比较少。

:bdelete N 删除对应编号的缓冲区。

image

vonzhou avatar Jul 25 '20 03:07 vonzhou