vim 配置(二) -- map 类操作
0. 简介
通过map可以配置vim一些快捷键操作,比如map <C-a> ggVG
来设置Ctrl+a
选择vim正在编辑的文件的所用内容。
在介绍map命令之前,先介绍一下vim的不同模式,在vim不同模式下都有对应的map操作。
1. VIM 模式
- Normal Mode: 普通模式,vim打开文件默认就是这种模式,从其他模式通过
esc
切换到normal mode
- Visual Mode: 可视模式, vim在
normal mode
下通过按键v
进入可视模式,可视模式下可以选定多个字符,多行,多列等。 - Insert Mode: 插入模式,在插入模式下,可以进行文本的编辑,从
Normal Mode
通过按键i
进入插入模式, 通过esc
键返回Normal Mode
。 - Select Mode: 选择模式, 在选择模式下可以选择多行或者多个字符,此模式下选择某些文本之后,进行的任何键的输入都是直接替换选择的文本,
和windows下面用鼠标选择一部分文本进行替换是一个原理。 从
Normal Mode
通过gh
切换到选择模式。 - Command-Line/EX-Mode: 命令行模式和EX 模式,
Normal Mode
下按:
进入命令行模式,可以进行一些命令操作,比如w, q, x, set paste
等.Normal Mode
下按Q
进入EX模式,是多行的命令行模式。
如上介绍了vim的几种模式, 下面看下每种模式和map的关系
2. vim 各模式下的map
vim 通过map不同的前缀来表示此快捷键设置生效的模式。如nmap 表示nmap设置的快捷键是在Normal Mode
下生效。
不同模式对应的map前缀不一样, 下面给出不同map前缀对应的vim模式
map前缀 | 生效模式 | 相关map命令 |
---|---|---|
n | 普通模式 | nmap, nnoremap, nunmap, nmapclear |
v | 可视模式 和 选择模式 | vmap, vnoremap, vunmap, vmapclear |
x | 可视模式 | xmap,xnoremap, xunmap, xmapclear |
s | 选择模式 | smap, snoremap, sunmap, smapclear |
i | 插入模式 | imap, inoremap, iunmap, imapclear |
c | 命令行模式 | cmap, cnoremap, cunmap, cmapclear |
无前缀 | 普通模式和可视模式 | map, noremap, unmap, mapclear |
其中unmap是取消某些快捷键绑定, *clear是清除某些模式下的所有快捷键映射, nore是非递归映射.
3. 非递归映射
递归映射, 其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b.
默认map是递归的映射,通过前缀nore
(no recursion)来实现非递归的映射, 如 nnoremap.
4. 特殊键列表
特殊按键|说明
—–|——
<k0> - <k9>
| 小键盘 0 到 9 keypad-0 keypad-9
<S-...>
| Shift+键 shift <S-
<C-...>
| Control+键 control ctrl <C-
<M-...>
| Alt+键 或 meta+键 meta alt <M-
<A-...>
| 同
<Esc>
代表Escape键;<CR>
代表Enter键;<D>
代表Cond键。
Alt键可以使用<M-key>
或<A-key>
来表示。<C>
代表Ctrl.
对于组合键,可以用<C-Esc>
代表Ctrl-Esc;使用<S-F1>
表示Shift-F1.
5. map特殊参数
特殊参数必须紧跟在映射命令(map, nmap等)的后边,在其他任何参数的前面。 有如下特殊参数
<buffer>
<silent>
<special>
<script>
<expr>
<unique>
后续继续研究特殊参数
6. 举个栗子
"" Ctrl + a全选文本
map <C-a> ggVG
"" Normal Mode F7 打开或者关闭NERDTree插件
nnoremap <silent> <F7> :NERDTreeToggle<cr>
"" Normal Mode F8 打开或者关闭TList插件
nnoremap <silent> <F8> :TlistToggle<CR>
"" Normal Mode gl 是跳转到上次修改的位置
nnoremap gl `.
"" 插入模式下mm进入Normal Mode
inoremap mm <ESC>
""Normal Mode下,",dt" 在当前光标后面添加日期时间
nmap ,dt a<C-R>=strftime('%Y-%m-%d %H:%M:%S')<CR>
""Insert Mode下,",dt" 在当前光标后面添加日期时间
imap ,dt <C-R>=strftime('%Y-%m-%d %H:%M:%S')<CR>
参考
- vim map
- vim的几种模式和按键映射
help map