-
Notifications
You must be signed in to change notification settings - Fork 27
/
learn-vi-49-02-autocmd-example.html
75 lines (65 loc) · 4.72 KB
/
learn-vi-49-02-autocmd-example.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh" xml:lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="learn-vi.css" />
<title>VIM学习笔记 自动命令-实例(autocmd-examples)</title>
</head>
<body>
<h1>VIM学习笔记 自动命令-实例(autocmd-examples)</h1>
<p>以下实例,将为您使用自动命令提高编辑效率提供灵感。关于自动命令的创建和管理,请参阅<a href="http://yyq123.github.io/learn-vim/learn-vi-49-01-autocmd.html" title="自动命令(autocmd)">自动命令(autocmd)</a>章节。</p>
<p>例如以下自动命令,将在离开Vim编辑器时,自动保存文件:</p>
<p style="text-indent:2em"><code class="inset">autocmd FocusLost * :wa</code></p>
<h2 class="article"><a id="autocmd-ex-filetyp">根据文件类型执行自动命令</a></h2>
<p>可以根据文件类型,执行特定命令。例如以下自动命令,将删除php文件行尾的空格</a>:</p>
<p style="text-indent:2em"><code class="inset">autocmd BufEnter *.php :%s/[ \t\r]\+$//e</code></p>
<p>可以根据文件类型,载入相关插件:</p>
<p style="text-indent:2em"><code class="inset">autocmd Filetype html,xml,xsl source $VIM/vimfile/plugin/closetag.vim</code></p>
<p>可以根据文件类型,设置<a href="http://yyq123.github.io/learn-vim/learn-vi-51-KeyMapping.html" title="Map">键盘映射</a>:</p>
<p style="text-indent:2em"><code class="inset">autocmd bufenter *.tex map <F1> :!latex %<CR></code></p>
<p>可以根据文件类型,设置不同的选项:</p>
<p style="text-indent:2em"><code class="inset">autocmd FileType ruby setlocal ts=2 sts=2 sw=2 expandtab</code></p>
<h2 class="article"><a id="autocmd-ex-mkdir">自动创建目录</a></h2>
<p>定义以下自动命令,将在保存文件时,检查所指定的目录是否存在:</p>
<pre><code>
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
</code></pre>
<p>如果使用<code class="inset">:w</code>命令保存文件时,引用了不存在的目录,那么将显示以下询问信息:</p>
<p><code class="msg">'XXXXX' does not exist. Create? [y/N]</code></p>
<p>你可以输入“y”,以自动创建目录并保存文件。</p>
<p>如果使用<code class="inset">:w!</code>命令保存文件时,引用了不存在的目录,那么将不会显示询问信息,而直接创建目录并保存文件。</p>
<h2 class="article"><a id="autocmd-ex-sovimrc">自动应用配置文件</a></h2>
<p>在保存<a href="http://yyq123.github.io/learn-vim/learn-vi-59-vimrc.html" title="vimrc">vimrc</a>配置文件时,将自动重载并生效变更之后设置,而免去了关闭并重新打开Vim的手工操作:</p>
<pre><code>
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
</code></pre>
<h2 class="article"><a id="autocmd-ex-timestamp">自动更新时间戳</a></h2>
<p>利用以下自动命令,将在保存文件时,自动更新文件中的时间戳信息。首先将查找以“This file last updated:”开头的行,然后将“:”之后的时间替换为当前时间。</p>
<p><code class="msg">This file last updated: 12/23/2019 4:05:10 PM</code></p>
<pre><code>
function! UpdateTimestamp ()
'[,']s/^This file last updated: \zs.*/\= strftime("%c") /
endfunction
augroup TimeStamping
autocmd!
autocmd BufWritePre,FileWritePre,FileAppendPre * :call UpdateTimestamp()
augroup END
</code></pre>
<p style="border-top:1px solid lightgray"><span style="float:right">Ver: 2.0 | <a href="mailto:yyq123@gmail.com">YYQ</a></span><span><<a title="自动命令(autocmd)" href="http://yyq123.github.io/learn-vim/learn-vi-49-01-autocmd.html">上一篇</a> |<a title="笔记列表" href="http://yyq123.github.com/learn-vim/learn-vi-00-00-TOC.html"> 目录 </a>| <a title="命令相关选项 (Options-CMD)" href="http://yyq123.github.io/learn-vim/learn-vi-46-03-CMD-Options.html">下一篇</a>></span></p>
</body>
</html>