-
Notifications
You must be signed in to change notification settings - Fork 27
/
learn-vi-40-Mode.html
80 lines (77 loc) · 7.19 KB
/
learn-vi-40-Mode.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
76
77
78
79
80
<!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学习笔记 模式(Mode)</title>
</head>
<body>
<p>Vim一个重要的设计目标,就是使用键盘快速的操作。Vim提供的解决方案,就是在插入模式下输入文本,而在常规模式下执行命令。你可以使用键盘命令在不同模式间进行切换。而传统的图形界面,是根本无法提供如此丰富的命令;即使能够提供,其菜单也将异常复杂而难以快速调用,更无法实现多种命令组合使用的强力威力。</p>
<p>举例说明,假设我想要将文本中的所有“from”替换为“to”:</p>
<ul>
<li>在传统的编辑器中,你需要选择“编辑”菜单下的“替换”菜单项;然后在对话框里分别输入“from”和“to”;再点击“全部替换”按钮;</li>
<li>而在Vim中,则只下需要在常规模式下执行一个简单的<code class="inset">:%s/from/to/g</code>替换命令。</li>
</ul>
<p>试想,如果我只想替换文本前几行中的指定字符,那么又需要先鼠标选择某段文本,然后再在对话框中指定只针对选中的文本执行替换操作;而在Vim中,则只需要在替换命令中指定操作范围,<code class="inset">:0,10s/from/to/gc</code>。命令行简单直接的威力,从中可见一斑。</p>
<p>使用<code class="inset">:help vim-modes</code>命令,可以查看关于模式的更多信息。</p>
<h2 class="article"><a id="normal-mode">常规模式</a></h2>
<p>如果希望高效地使用vim,那么应该尽量停留在常规模式,以便快速的使用各种命令;只有在需要键入文字时,才进入插入模式;而后立刻使用<kbd>Esc</kbd>键返回常规模式。当光标显示为闪烁的方块时,则标志你正在常规模式下。</p>
<p><a href="https://yyq123.github.io/learn-vim/images/Mode_ESC.png" title="Mode_ESC"><img src="https://yyq123.github.io/learn-vim/images/Mode_ESC.png" alt="Mode_ESC" /></a></p>
<p><a href="https://yyq123.github.io/learn-vim/images/Mode_NormalMode_Cursor.png" title="NormalMode_Cursor"><img src="https://yyq123.github.io/learn-vim/images/Mode_NormalMode_Cursor.png" alt="NormalMode_Cursor" /></a></p>
<p>我们可以使用<code class="inset">r</code>的命令来替换文本。例如<code class="inset">rx</code>就可以当前光标下的字符替换为x。当然也可以用数字来组合以形成新的命令来进行工作,例如<code class="inset">5rd</code>就是将当前光标以后的5个字符替换为d。</p>
<h2 class="article"><a id="mode-switching">模式切换</a></h2>
<p><a href="https://yyq123.github.io/learn-vim/images/Modes.png" title="Modes"><img src="https://yyq123.github.io/learn-vim/images/Modes.png" alt="Modes" /></a></p>
<ul>
<li><code class="inset">i</code>:进入插入模式,并定位到光标之前;</li>
<li><code class="inset">a</code>:进入插入模式,并定位到光标之后;</li>
<li><code class="inset">I</code>:进入插入模式,并定位到当前行的第一个非空字符;</li>
<li><code class="inset">A</code>:进入插入模式,并定位到当前行的最后一个字符;</li>
<li><code class="inset">o</code>:进入插入模式,并在当前行下面,插入一个新行;</li>
<li><code class="inset">O</code>:进入插入模式,并在当前行上面,插入一个新行;</li>
<li><code class="inset">r</code>:进入替换模式,替换当前字符,然后自动返回常规模式;</li>
<li><code class="inset">R</code>:进入替换模式,替换当前字符及之后的字符,直到使用ESC键返回常规模式;</li>
<li><code class="inset">s</code>:删除当前字符,并进入插入模式;</li>
<li><code class="inset">S</code>:删除当前行,并进入插入模式;</li>
<li><code class="inset">v</code>:进入字(character)符可视化模式;</li>
<li><code class="inset">V</code>:进入行(line)可视化模式;</li>
<li><code class="inset">Ctrl-v</code>:进入块(block)可视化模式;</li>
</ul>
<table summary="Modes" border="2" frame="hsides" rules="all" cellspacing="0" cellpadding="3">
<tr><th>Mode</th><th>模式</th><th>标签</th><th>模式</th><th>描述</th></tr>
<tr><td>Normal mode</td><td>常规模式(命令模式)</td><td></td><td>n</td><td>默认状态。只能输入命令,不能输入文本。</td></tr>
<tr><td>Insert mode</td><td>插入模式(编辑模式)</td><td>-- INSERT --</td><td>i</td><td>i进入插入模式输入文本,ESC退出</td></tr>
<tr><td>Replace mode</td><td>替换模式(覆盖模式)</td><td>-- REPLACE --</td><td>R</td><td></td></tr>
<tr><td>Command-line mode</td><td>命令行模式</td><td></td><td>c</td><td>:进入命令</td></tr>
<tr><td rowspan="3">Visual mode</td><td rowspan="3">可视化模式</td><td>-- VISUAL --</td><td>v</td><td>字可视化模式</td></tr>
<tr><td>V</td><td>行可视化模式</td></tr>
<tr><td>CTRL-Q</td><td>块可视化模式</td></tr>
<tr><td rowspan="3">Select mode</td><td>-- SELECT --</td><td rowspan="3">选择模式</td><td>s</td><td>Select by character</td><td></td></tr>
<tr><td>S</td><td>Select by line</td></tr>
<tr><td>CTRL-S</td><td>Select blockwise</td><td></td></tr>
<tr><td>Ex mode</td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</table>
<p><a href="http://darkpan.com/files/vim.svg" title="VIM Mode Transition Diagram">VIM Mode Transition Diagram</a></p>
<p>使用<code class="inset">:help mode-switching</code>命令,可以查看关于模式切换的帮助信息。</p>
<table summary="Commands" border="2" frame="hsides" rules="all" cellspacing="0" cellpadding="3">
<caption>命令小结</caption>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
<tr><td><code class="inset"></code></td><td></td></tr>
</table>
<p style="border-top:1px solid lightgray"><span style="float:right">Ver: 2.0 | <a href="mailto:[email protected]">YYQ</a></span><span><<a title="" href="http://yyq123.github.io/learn-vim/.html">上一篇</a> |<a title="笔记列表" href="http://yyq123.github.com/learn-vim/learn-vi-00-00-TOC.html"> 目录 </a>| <a title="" href="http://yyq123.github.io/learn-vim/.html">下一篇</a>></span></p>
</body>
</html>