-
Notifications
You must be signed in to change notification settings - Fork 28
/
learn-vi-51-KeyMapping.html
198 lines (192 loc) · 14 KB
/
learn-vi-51-KeyMapping.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
<!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学习笔记 键盘映射 (Map)</title>
</head>
<body>
<h1>VIM学习笔记 键盘映射 (Map)</h1>
<h2 class="article"><a id="map-cmd">设置键盘映射</a></h2>
<p>使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来。例如使用以下命令,可以通过F5键将单词用花括号括起来:</p>
<p style="text-indent:2em"><code class="inset">:map <F5> i{ea}<Esc></code></p>
<p>其中:i{将插入字符{,然后使用Esc退回到命令状态;接着用e移到单词结尾,a}增加字符},最后退至命令状态。在执行以上命令之后,光标定位在一个单词上(例如amount),按下F5键,这时字符就会变成{amount}的形式。</p>
<h2 class="article"><a id="map-mode">不同模式下的键盘映射</a></h2>
<p>使用下表中不同形式的map命令,可以针对特定的模式设置键盘映射:</p>
<table summary="Map in diffent mode" border="1" rules="all" cellspacing="0" cellpadding="2" style="text-align:center">
<tr><td colspan="2">Command<br />命令</td><td><br />Normal<br /> 常规模式 </td><td><br />Visual<br />可视化模式</td><td><br />Select<br />选择模式</td><td>Operator<br />Pending<br />运算符模式</td><td><br />Insert<br />插入模式</td><td>Command<br />Line<br />命令行模式</td><td><br />Terminal-Job<br />终端作业模式</td><td>Help<br />帮助信息</td></tr>
<tr><td><code class="inset">:map</code></td><td><code class="inset">:noremap</code></td><td>y</td><td>y</td><td>y</td><td>y</td><td></td><td></td><td></td><td style="text-align:left"><code>:h mapmode-nvo</code></td></tr>
<tr><td><code class="inset">:nmap</code></td><td><code class="inset">:nnoremap</code></td><td>y</td><td></td><td></td><td></td><td></td><td></td><td></td><td style="text-align:left"><code>:h mapmode-n</code></td></tr>
<tr><td><code class="inset">:vmap</code></td><td><code class="inset">:vnoremap</code></td><td></td><td>y</td><td>y</td><td></td><td></td><td></td><td></td><td style="text-align:left"><code>:h mapmode-v</code></td></tr>
<tr><td><code class="inset">:xmap</code></td><td><code class="inset">:xnoremap</code></td><td></td><td>y</td><td></td><td></td><td></td><td></td><td></td><td style="text-align:left"><code>:h mapmode-x</code></td></tr>
<tr><td><code class="inset">:smap</code></td><td><code class="inset">:snoremap</code></td><td></td><td></td><td>y</td><td></td><td></td><td></td><td></td><td style="text-align:left"><code>:h mapmode-s</code></td></tr>
<tr><td><code class="inset">:omap</code></td><td><code class="inset">:onoremap</code></td><td></td><td></td><td></td><td>y</td><td></td><td></td><td></td><td style="text-align:left"><code>:h mapmode-o</code></td></tr>
<tr><td><code class="inset">:map!</code></td><td><code class="inset">:noremap!</code></td><td></td><td></td><td></td><td></td><td>y</td><td>y</td><td></td><td style="text-align:left"><code>:h mapmode-ic</code></td></tr>
<tr><td><code class="inset">:imap</code></td><td><code class="inset">:inoremap</code></td><td></td><td></td><td></td><td></td><td>y</td><td></td><td></td><td style="text-align:left"><code>:h mapmode-i</code></td></tr>
<tr><td><code class="inset">:lmap</code></td><td><code class="inset">:lnoremap</code></td><td></td><td></td><td></td><td></td><td>y</td><td>y</td><td></td><td style="text-align:left"><code>:h mapmode-l</code></td></tr>
<tr><td><code class="inset">:cmap</code></td><td><code class="inset">:cnoremap</code></td><td></td><td></td><td></td><td></td><td></td><td>y</td><td></td><td style="text-align:left"><code>:h mapmode-c</code></td></tr>
<tr><td><code class="inset">:tmap</code></td><td><code class="inset">:tnoremap</code></td><td></td><td></td><td></td><td></td><td></td><td></td><td>y</td><td style="text-align:left"><code>:h mapmode-t</code></td></tr>
</table>
<p>Operator-pending模式,是指当你输入操作符(比如<kbd>d</kbd>)时,然后继续输入的移动步长和文本对象(<kbd>dw</kbd>)的状态。</p>
<p>第一列命令定义的映射,仍然可以被重新映射;第二列命令(包含noremap)定义的映射,是不可以被重新映射的。</p>
<h2 class="article"><a id="map-samples">键盘映射实例</a></h2>
<p>使用以下命令,可以在Normal Mode和Visual/Select Mode下,利用Tab键和Shift-Tab键来缩进文本:</p>
<p><code class="inset">
nmap <tab> V><br />
nmap <s-tab> V<<br />
vmap <tab> >gv<br />
vmap <s-tab> <gv
</code></p>
<p>使用以下命令,指定F10键来新建标签页:</p>
<p><code class="inset">:map <F10> <Esc>:tabnew<CR></code></p>
<p>其中:<Esc>代表<kbd>Escape</kbd>键;<CR>代表<kbd>Enter</kbd>键;而功能键则用<F10>表示。首先进入命令行模式,然后执行新建标签页的:tabnew命令,最后返回常规模式。</p>
<p>同理:对于组合键,可以用<C-Esc>代表<kbd>Ctrl-Esc</kbd>;使用<S-F1>表示<kbd>Shift-F1</kbd>。对于Mac用户,可以使用<D>代表<kbd>Command</kbd>键。</p>
<p>注意:<kbd>Alt</kbd>键可以使用<M-key>或<A-key>来表示。</p>
<p>关于键盘符号的详细说明,请参考下表。使用<code class="inset">:help key-notation</code>命令可以查看相关帮助信息。</p>
<table summary="special notations for keyboard keys" border="1" rules="all" cellspacing="0" cellpadding="2">
<colgroup>
<col style="width:10em;" />
<col style="width:15em;" />
</colgroup>
<tr>
<td><strong>Keys</strong></td>
<td><strong>Notation</strong></td>
</tr>
<tr>
<td><BS></td>
<td>Backspace</td>
</tr>
<tr>
<td><Tab></td>
<td>Tab</td>
</tr>
<tr>
<td><CR></td>
<td>Enter</td>
</tr>
<tr>
<td><Enter></td>
<td>Enter</td>
</tr>
<tr>
<td><Return></td>
<td>Enter</td>
</tr>
<tr>
<td><Esc></td>
<td>Escape</td>
</tr>
<tr>
<td><Space></td>
<td>Space</td>
</tr>
<tr>
<td><Bar></td>
<td>| 竖直线</td>
</tr>
<tr>
<td><Up></td>
<td>Up arrow</td>
</tr>
<tr>
<td><Down></td>
<td>Down arrow</td>
</tr>
<tr>
<td><Left></td>
<td>Left arrow</td>
</tr>
<tr>
<td><Right></td>
<td>Right arrow</td>
</tr>
<tr>
<td><F1> <F12></td>
<td>Function keys 1 to 12</td>
</tr>
<tr>
<td>#1 #9 #0</td>
<td>Function keys F1 to F9, F10</td>
</tr>
<tr>
<td><Insert></td>
<td>Insert</td>
</tr>
<tr>
<td><Del></td>
<td>Delete</td>
</tr>
<tr>
<td><Home></td>
<td>Home</td>
</tr>
<tr>
<td><End></td>
<td>End</td>
</tr>
<tr>
<td><PageUp></td>
<td>Page up</td>
</tr>
<tr>
<td><PageDown></td>
<td>Page down</td>
</tr>
</table>
<h2 class="article"><a id="map-listing">查看键盘映射</a></h2>
<p><a href="https://yyq123.github.io/learn-vim/images/map.png" title="map"><img src="https://yyq123.github.io/learn-vim/images/map.png" alt="map" /></a></p>
<p>使用<code class="inset">:map</code>命令,可以列出所有键盘映射。其中第一列标明了映射在哪种模式下工作:</p>
<table summary="Map in diffent mode" border="1" rules="all" cellspacing="0" cellpadding="2" style="text-align:center">
<tr><td>标记</td><td>模式</td></tr>
<tr><td><space></td><td>常规模式,可视化模式,选择模式,运算符模式</td></tr>
<tr><td>n</td><td>常规模式</td></tr>
<tr><td>v</td><td>可视化模式,选择模式</td></tr>
<tr><td>s</td><td>选择模式</td></tr>
<tr><td>x</td><td>可视化模式</td></tr>
<tr><td>o</td><td>运算符模式</td></tr>
<tr><td>!</td><td>插入模式,命令行模式</td></tr>
<tr><td>i</td><td>插入模式</td></tr>
<tr><td>l</td><td>插入模式,命令行模式,Lang-Arg模式</td></tr>
<tr><td>c</td><td>命令行模式</td></tr>
<tr><td>t</td><td>终端作业模式</td></tr>
</table>
<p>使用下表中不同形式的map命令(不带任何参数),可以列出针对特定模式设置的键盘映射:</p>
<table summary="Map in diffent mode" border="1" rules="all" cellspacing="0" cellpadding="2" style="text-align:center">
<tr><td colspan="2">Command<br />命令</td><td><br />Normal<br /> 常规模式 </td><td><br />Visual<br />可视化模式</td><td><br />Select<br />选择模式</td><td>Operator<br />Pending<br />运算符模式</td><td><br />Insert<br />插入模式</td><td>Command<br />Line<br />命令行模式</td><td><br />Terminal-Job<br />终端作业模式</td></tr>
<tr><td><code class="inset">:map</code></td><td><code class="inset">:noremap</code></td><td>y</td><td>y</td><td>y</td><td>y</td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:nmap</code></td><td><code class="inset">:nnoremap</code></td><td>y</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:vmap</code></td><td><code class="inset">:vnoremap</code></td><td></td><td>y</td><td>y</td><td></td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:xmap</code></td><td><code class="inset">:xnoremap</code></td><td></td><td>y</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:smap</code></td><td><code class="inset">:snoremap</code></td><td></td><td></td><td>y</td><td></td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:omap</code></td><td><code class="inset">:onoremap</code></td><td></td><td></td><td></td><td>y</td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:map!</code></td><td><code class="inset">:noremap!</code></td><td></td><td></td><td></td><td></td><td>y</td><td>y</td><td></td></tr>
<tr><td><code class="inset">:imap</code></td><td><code class="inset">:inoremap</code></td><td></td><td></td><td></td><td></td><td>y</td><td></td><td></td></tr>
<tr><td><code class="inset">:lmap</code></td><td><code class="inset">:lnoremap</code></td><td></td><td></td><td></td><td></td><td>y</td><td>y</td><td></td></tr>
<tr><td><code class="inset">:cmap</code></td><td><code class="inset">:cnoremap</code></td><td></td><td></td><td></td><td></td><td></td><td>y</td><td></td></tr>
<tr><td><code class="inset">:tmap</code></td><td><code class="inset">:tnoremap</code></td><td></td><td></td><td></td><td></td><td></td><td></td><td>y</td></tr>
</table>
<h2 class="article"><a id="umap-cmd">取消键盘映射</a></h2>
<p>如果想要取消一个映射,可以使用以下命令:</p>
<p style="text-indent:2em"><code class="inset">:unmap <F10></code></p>
<p>注意:必须为:unmap命令指定一个参数。如果未指定任何参数,那么系统将会报错,而不会取消所有的键盘映射。</p>
<p>针对不同模式下的键盘映射,需要使用与其相对应的unmap命令。例如:使用<code class="inset">:iunmap</code>命令,取消插入模式下的键盘映射;而取消常规模式下的键盘映射,则需要使用<code class="inset">:nunmap</code>命令。</p>
<p>使用以下命令,可以取消指定模式中的所有键盘映射。请注意,此命令将会移除所有用户定义和系统默认的键盘映射。</p>
<p style="text-indent:2em"><code class="inset">:mapclear</code></p>
<table summary="Map in diffent mode" border="1" rules="all" cellspacing="0" cellpadding="2" style="text-align:center">
<tr><td colspan="2">Command<br />命令</td><td><br />Normal<br /> 常规模式 </td><td><br />Visual<br />可视化模式</td><td><br />Select<br />选择模式</td><td>Operator<br />Pending<br />运算符模式</td><td><br />Insert<br />插入模式</td><td>Command<br />Line<br />命令行模式</td><td><br />Terminal-Job<br />终端作业模式</td></tr>
<tr><td><code class="inset">:unmap</code></td><td><code class="inset">:mapclear</code></td><td>y</td><td>y</td><td>y</td><td>y</td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:nunmap</code></td><td><code class="inset">:nmapclear</code></td><td>y</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:vunmap</code></td><td><code class="inset">:vmapclear</code></td><td></td><td>y</td><td>y</td><td></td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:xunmap</code></td><td><code class="inset">:xmapclear</code></td><td></td><td>y</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:sunmap</code></td><td><code class="inset">:smapclear</code></td><td></td><td></td><td>y</td><td></td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:ounmap</code></td><td><code class="inset">:omapclear</code></td><td></td><td></td><td></td><td>y</td><td></td><td></td><td></td></tr>
<tr><td><code class="inset">:unmap!</code></td><td><code class="inset">:mapclear!</code></td><td></td><td></td><td></td><td></td><td>y</td><td>y</td><td></td></tr>
<tr><td><code class="inset">:iunmap</code></td><td><code class="inset">:imapclear</code></td><td></td><td></td><td></td><td></td><td>y</td><td></td><td></td></tr>
<tr><td><code class="inset">:lunmap</code></td><td><code class="inset">:lmapclear</code></td><td></td><td></td><td></td><td></td><td>y</td><td>y</td><td></td></tr>
<tr><td><code class="inset">:cunmap</code></td><td><code class="inset">:cmapclear</code></td><td></td><td></td><td></td><td></td><td></td><td>y</td><td></td></tr>
<tr><td><code class="inset">:tunmap</code></td><td><code class="inset">:tmapclear</code></td><td></td><td></td><td></td><td></td><td></td><td></td><td>y</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="比较文件(diff)" href="http://yyq123.blogspot.com/2010/09/vim-diff.html">上一篇</a> |<a title="笔记列表" href="http://yyq123.github.com/learn-vim/learn-vi-00-00-TOC.html"> 目录 </a>| <a title="缩写(Abbr)" href="http://yyq123.blogspot.com/2010/12/vim-abbreviation.html">下一篇</a>></span></p>
</body>
</html>