VIM学习笔记 自动命令-实例(autocmd-examples)

以下实例,将为您使用自动命令提高编辑效率提供灵感。关于自动命令的创建和管理,请参阅自动命令(autocmd)章节。

例如以下自动命令,将在离开Vim编辑器时,自动保存文件:

autocmd FocusLost * :wa

根据文件类型执行自动命令

可以根据文件类型,执行特定命令。例如以下自动命令,将删除php文件行尾的空格:

autocmd BufEnter *.php :%s/[ \t\r]\+$//e

可以根据文件类型,载入相关插件:

autocmd Filetype html,xml,xsl source $VIM/vimfile/plugin/closetag.vim

可以根据文件类型,设置键盘映射

autocmd bufenter *.tex map <F1> :!latex %<CR>

可以根据文件类型,设置不同的选项:

autocmd FileType ruby setlocal ts=2 sts=2 sw=2 expandtab

自动创建目录

定义以下自动命令,将在保存文件时,检查所指定的目录是否存在:


augroup vimrc-auto-mkdir
  autocmd!
  autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
  function! s:auto_mkdir(dir, force)
    if !isdirectory(a:dir)
          \   && (a:force
          \       || input("'" . a:dir . "' does not exist. Create? [y/N]") =~? '^y\%[es]$')
      call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
    endif
  endfunction
augroup END

如果使用:w命令保存文件时,引用了不存在的目录,那么将显示以下询问信息:

'XXXXX' does not exist. Create? [y/N]

你可以输入“y”,以自动创建目录并保存文件。

如果使用:w!命令保存文件时,引用了不存在的目录,那么将不会显示询问信息,而直接创建目录并保存文件。

自动应用配置文件

在保存vimrc配置文件时,将自动重载并生效变更之后设置,而免去了关闭并重新打开Vim的手工操作:


augroup Reload_Vimrc        " Group name.  Always use a unique name!
    autocmd!                " Clear any preexisting autocommands from this group
    autocmd! BufWritePost $MYVIMRC source % | echom "Reloaded " . $MYVIMRC | redraw
    autocmd! BufWritePost $MYGVIMRC if has('gui_running') | so % | echom "Reloaded " . $MYGVIMRC | endif | redraw
augroup END

自动更新时间戳

利用以下自动命令,将在保存文件时,自动更新文件中的时间戳信息。首先将查找以“This file last updated:”开头的行,然后将“:”之后的时间替换为当前时间。

This file last updated: 12/23/2019 4:05:10 PM


function! UpdateTimestamp ()
  '[,']s/^This file last updated: \zs.*/\= strftime("%c") /
endfunction

augroup TimeStamping
  autocmd!
  autocmd BufWritePre,FileWritePre,FileAppendPre * :call UpdateTimestamp()
augroup END

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>