autocmd 用于配置当某个确定事件发生时, 要执行的命令.
借用书中的例子, 看一下 autocmd 的基本结构:
gg=G |
这里 BufWritePre, BufRead 都是需要监听的事件, *.html 是需要过滤的模式, 整个命令的含义就是, 当开始写入 html 类型文件或者编辑 html 类型文件之前, 自动执行:normal gg=G
, 也就是缩进代码.
[此处, BufWritePre 指的是开始将整个 Buffer 写入文件 , BufRead 指的是读文件后, 开始编辑. ]
通过:h autocmd-events
可以查看所有可以绑定 Autocommands 的事件列表.
其中, 最常用的 Event 是 FileType.
比如:
:autocmd FileType javascript nnoremap <buffer> <LocalLeader>c I//<esc> |
当打开一个javascript (.js)文件时, 执行nnoremap <buffer> <LocalLeader>c I//<esc>
, 也就是按 <LocalLeader>c
会添加注释.
这里提一个简单的应用.
Vim中编辑 json 文件的时候, 默认是没有格式化的, 如何实现打开JSON文件时, 自动格式化内容, 方便阅读?
这里说一下我的做法.
安装 jq, 附上链接download
修改 .vimrc
, 添加:
autocmd BufRead *.json %!jq '.' |
source 后, 打开 json 格式文件时, 可以看到已经格式化了.
autocmd 有一个兄弟 augroup. 可以把相近的 autocmd 放在一个group 中:
augroup testgroup |
这里使用autocmd!
来清理之前的 autocmd 设置.
augroup 的作用, 是用来避免重复定义 autocmd. 官网文档给到的解释是:
This prevents having the autocommands defined twice (e.g., after sourcing the .vimrc file again).
书中使用了一个 BufWrite + echom 的例子来说明使用 augroup 可以避免的问题, 同文档提到的一致, 这里就不细说了.
附上一个小小的tips. 如果你有执行 augroup 的例子, 会发现 messages 有些多, 想要清理的话, 可以使用:messages clear
OK, 本章结束.
Bye 2021.