Vim命令行命令 autocmd 用于指示 Vim 监听某一类事件,一旦该事件发生,Vim 将执行指定的命令。

在文件读写,缓冲区或窗口进出,甚至 Vim 退出等事件发生时,都可以指定要自动执行的命令。autocmd 语句的这种检测机制可用于设置用户感兴趣的事件发生时自动执行某些操作。

例如,可以对匹配 .c 的文件自动置位 ‘cindent’ 选项,可以通过 autocmd 命令监听 FileType 事件,它会在 Vim 检测出当前文件类型时被触发;还可以通过 autocmd 命令监听 BufNewFile 事件,它将在通过Vim新建文件时被触发对应操作。

可以将以下Vim配置添加到Vim配置文件 ~/.vimrc 中,实现新建后缀名为 .cpp时自动在新文件中添加文件作者注释信息并自动将光标定位到文件末尾。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
autocmd BufNewFile *.cpp exec ":call SetTitle()"
func SetTitle()
call setline(1,"/**")
call append(line("."), " *   Copyright (C) ".strftime("%Y")." All rights reserved.")
call append(line(".")+1, " *")
call append(line(".")+2, " *   FileName      :".expand("%:t"))
call append(line(".")+3, " *   Author        :vimjc.com")
call append(line(".")+4, " *   Email         :admin@vimjc.com")
call append(line(".")+5, " *   Date          :".strftime("%Y年%m月%d日"))
call append(line(".")+6, " *   Description   :")
call append(line(".")+7, " */")
endfunc
"自动将光标定位到末尾"
autocmd BufNewFile * normal G

vim-autocmd

Vim autocmd 命令常用的事件类型如下表所示,更多内容可以在Vim命令行模式下使用命令 h :autocmd 查看官方完整文档。

autocmd事件 含义
BufNewFile 开始编辑尚不存在的文件
BufReadPre 开始编辑新缓冲区,读入文件前
BufRead 开始编辑新缓冲区,读入文件后
BufReadPost 开始编辑新缓冲区,读入文件后
BufReadCmd 开始编辑新缓冲区前
FileReadPre :read 命令读入文件前
FileReadPost :read 命令读入文件后
FileReadCmd :read 命令读入文件前
BufWrite 开始把整个缓冲区写回到文件
BufWritePre 开始把整个缓冲区写回到文件
BufWritePost 把整个缓冲区写回到文件后
BufWriteCmd 把整个缓冲区写回到文件前
FileWritePre 开始把缓冲区部分内容写回到文件
FileWritePost 把缓冲区部分内容写回到文件后
FileWriteCmd 把缓冲区部分内容写回到文件前
BufAdd 刚把缓冲区附加到缓冲区列表后
BufCreate 刚把缓冲区附加到缓冲区列表后
BufDelete 从缓冲区列表删除缓冲区前
BufWipeout 从缓冲区列表完全删除缓冲区前
BufFilePre 改变当前缓冲区名字前
BufFilePost 改变当前缓冲区名字后
BufEnter 进入缓冲区后
BufLeave 转到其它缓冲区前
BufWinEnter 在窗口显示缓冲区前
BufWinLeave 从窗口删除缓冲区前
BufNew 刚建立新缓冲区后
FileType 设置 filetype 选项时
Syntax 设置 syntax 选项时
EncodingChanged encoding 选项改变后
VimEnter 完成所有的初始化步骤后
GUIEnter 成功启动 GUI 后
GUIFailed 启动 GUI 失败之后
QuitPre :quit 时,决定是否退出之前
VimLeavePre 退出 Vim 前,在写入 viminfo 文件之前
VimLeave 退出 Vim 前,在写入 viminfo 文件之后
FileChangedShellPost 对在编辑开始后被改变的文件的处理完成后
FileChangedRO 对只读文件进行第一次修改前
ShellCmdPost 执行shell命令后
SourcePre 执行 Vim 脚本之前
VimResized Vim 窗口大小改变后

嗯,扫一扫就可以找到小女子我啦~