转自:http://blog.csdn.net/taoshengyang/article/details/6319106

有五种映射存在 
- 用于普通模式: 输入命令时。 
- 用于可视模式: 可视区域高亮并输入命令时。 
- 用于操作符等待模式: 操作符等待中 ("d","y","c" 等等之后)。 
见下: |omap-info|。 
- 用于插入模式: 也用于替换模式。 
? 用于命令行模式: 输入 ":" 或 "/" 命令时。

下表是map绑定中,对应的模式代号。现在先了解一下,等看完之后再回过头看这个模式代号就会明白了。 
字 符 模 式 ~ 
<Space> 普通、可视、选择和操作符等待 
n 普通 
v 可视和选择 
s 选择 
x 可视 
o 操作符等待 
! 插入和命令行 
i 插入 
l 插入、命令行和 Lang-Arg 模式的 ":lmap" 映射 
c 命令行

我主要讲解一下“n(普通模式)”下的两个绑定命令,等看完之后就对应的明白别的模式下的命令了。 
适用于普通模式的映射命令主要有: 
1. :map 
[语法] :map {lhs} {rhs} |mapmode-nvo| *:map* 
1.1 作用模式: n、v、o (普通、可视和选择、操作符等待) 
1.2 命令格式: 
:map {lhs} {rhs} 
含义: 在:map作用的模式中把键系列 {lhs} 映射为 {rhs},{rhs}可进行映射扫描,也就是可递归映射。 
1.3 举例: 
:map td :tabnew .<cr> 
含义:在其作用模式(普通、可视、操作符)下,输入td等价于输入 :tabnew . <cr>。而普通模式下输入:tabnew . <cr>就是打开当前目录 
如果再定义绑定 :map ts td,就是指在其作用模式下输入ts等价于td,也就是打开当前目录。不过如果没有特殊需要,一般不建议递归映射。

2. :noremap 
:moremap
和:map命令相对,作用模式和命令格式都相同,只不过不允许再对{rhs}进行映射扫描,也就是{lhs}定义后的映射就是{rhs}的键序列,不会再
对{rhs}键序列重新解释扫描。它一般用于重定义一个命令,当然如果:map不需要递归映射的话,建议试用:noremap 
比如: 
:noremap ts td 
它的意思是在其作用模式下,输入ts就是输入td,但是和:map不同的是,此时td再不会做进一步扫描解释。虽然之前已经定义了td,但是不会对td再做扫描

3. :unmap 
:unmap是对应取消:map绑定的{lhs},作用模式相同,命令格式 :unmap {lhs}。 
例如: 
:unmap td 
就是取消在其作用模式中td的绑定,比如之前td被绑定为:tabnew .<cr>,此时此绑定消失。 
4. :mapclear 
:mapclear时对应取消所有:map绑定的,慎用!

5. :nmap 
:nmap是:map的普通模式板,也就是说其绑定的键只作用于普通模式。 
例如: 
:nmap td :tabnew .<cr> 和 :map td :tabnew .<cr> 在普通模式下等效 
6. :nnoremap 
:nnorempa和:nmap的关系和:noremap和:map的关系一样,只是:nmap的非递归版 
7. :nunmap 
:nunmap和:nmap的关系和:unmap和:map的关系一样,取消:nmap的绑定。 
8. :nmapclear 
:nmapclear是对应取消所有:map绑定的,慎用!


完以上,应该可以发现一个规律,前4个是一组,后4个时一组,后一组比前一组多一个n就是指只作用于普通模式。其中每组内*nore*是其对应的非递归
版、*un*是取消绑定某个<lhs>绑定、clear后缀是取消所有绑定。发现了这个规律,再翻到前面的模式代号表,你大体可以猜到
vmap、xmap、smap、omap是什么意思了吧,以及相对应的nore版本、un版本、clear版本。

另外: 
{rhs} 之前可能显示一个特殊字符: 
* 表示它不可重映射 
& 表示仅脚本的局部映射可以被重映射 
@ 表示缓冲区的局部映射

到这一步你可以轻松的长吸一口气,因为相关的命令已经都了解了,记不住没关系,可以随时:help map一下。不过别急,后面还有map更多的选项等着去攻克。

键表 |key-notation| 
<k0> - <k9> 小键盘 0 到 9 *keypad-0* *keypad-9* 
<S-...> Shift+键 *shift* *<S-* 
<C-...> Control+键 *control* *ctrl* *<C-* 
<M-...> Alt+键 或 meta+键 *meta* *alt* *<M-* 
<A-...> 同 <m-...> *<A-* 
<t_xx> termcap 里的 "xx" 入口键

特殊参数: 
1. <buffer> 
2. <silent> 
3. <special> 
4. <script> 
5. <expr> 
6. <unique> 
它们必须映射命令的后边,在其他任何参数的前面。

<buffer>如果这些映射命令的第一个参数是<buffer>,映射将只局限于当前缓冲区(也就是你此时正编辑的文件)内。比如: 
:map <buffer> ,w /a<CR> 
它的意思时在当前缓冲区里定义键绑定,“,w”将在当前缓冲区里查找字符a。同样你可以在其他缓冲区里定义: 
:map <buffer> ,w /b<CR> 
比如我经常打开多个标签(:tabedit),想要在各自标签里定义",w"键绑定,那么你只要在每个标签页里分别定义就可,其作用域也只在各自的标签里。同样要清除这些缓冲区的键绑定也要加上<buffer>参数,比如: 
:unmap <buffer> ,w 
:mapclear <buffer>

<silent>是指执行键绑定时不在命令行上回显,比如: 
:map <silent> ,w /abcd<CR> 
你在输入,w查找abcd时,命令行上不会显示/abcd,如果没有<silent>参数就会显示出来

<special>一般用于定义特殊键怕有副作用的场合。比如: 
:map <special> <F12> /Header<CR>

<unique>一般用于定义新的键映射或者缩写命令的同时检查是否该键已经被映射,如果该映射或者缩写已经存在,则该命令会失败

<expr>. 如果定义新映射的第一个参数是<expr>,那么参数会作为表达式来进行计算,结果使用实际使用的<rhs>,例如: 
:inoremap <expr> . InsertDot() 
这可以用来检查光标之前的文本并在一定条件下启动全能 (omni) 补全。 
一个例子: 
let counter = 0 
inoremap <expr> <C-L> ListItem() 
inoremap <expr> <C-R> ListReset()

func ListItem() 
let g:counter += 1 
return g:counter . '. ' 
endfunc

func ListReset() 
let g:counter = 0 
return '' 
endfunc 
在插入模式下,CTRL-L插入顺序的列表编号,并返回;CTRL-R复位列表编号到0,并返回空。

<Leader> mapleader 
mapleader变量对所有map映射命令起效,它的作用是将参数<leader>替换成mapleader变量的值,比如: 
:map <Leader>A oanother line<Esc> 
如果mapleader变量没有设置,则用默认的反斜杠代替,因此这个映射等效于: 
:map /A oanother line<Esc> 
意思时输入/A键时,在下一行输入another line并返回到普通模式。 
如果设置了mapleader变量,比如: 
let mapleader = "," 
那么就等效于: 
:map ,A oanother line<Esc>

<LocalLeader> maplocalleader 
<LocalLeader>和<Leader>类似,只不过它只作用于缓冲区。 
因此在设置mapleader和maplocalleader时最好区分开,不要出现冲突。

大体上映射的主要部分已经都提到了,还有很多具体的映射相关的内容可以参见:help map

 

vim map nmap(转)的更多相关文章

  1. VIM键盘映射 (Map)

    http://www.pythonclub.org/linux/vim/map VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命 ...

  2. Vim魔法堂:认识快捷键绑定

    Brief 习惯在VS上按<F5>来编译运行程序,刚用上VIM上就觉得无比的麻烦,而随着对VIM的学习我们分阶段的简化这一操作 1. 退出VIM,在shell下编译&&运行 ...

  3. Vim配置及说明——IDE编程环境

    Vim配置及说明——IDE编程环境 Vim配置及说明——IDE编程环境 1.基本及字体 2.插件管理 3.主题风格 4.窗口设置 5.目录树导航 6.标签导航 7.taglist 8.多文档编辑 9. ...

  4. vim配置vimrc详解

    vimrc的存放位置: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 用户 exrc 文件: &q ...

  5. vim配置vimrc详解(转)

    vimrc的存放位置: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 用户 exrc 文件: &q ...

  6. 一套强大的vim配置文件+详细注释

    phpchina折腾王独家配置,灰常牛叉的一套vim配置,另附有详细注释,自己折腾vim的时候可以参照其中的大部分设置进行一些个性化定制."是否兼容VI,compatible为兼容,noco ...

  7. vim 快捷键绑定

    1. 退出VIM,在shell下编译&&运行程序 :wq [root@fsjohnhuang ~]# gcc main.c -o main [root@fsjohnhuang ~]# ...

  8. 终于掌握vim的寄存器和系统剪贴板的使用了- 要安装vim-X11包

    vim的系统剪贴板 vim的 加号寄存器 "+ 是和系统剪贴板 相关联的. 加号寄存器和系统剪贴板之间的内容, 可以互相切换. 要把 加号寄存器中的内容, -> 放到/转移到系统剪贴板 ...

  9. 【转】ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装

    原文网址:http://www.cnblogs.com/jostree/p/4137402.html 作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree ...

随机推荐

  1. Struts2+Datagrid表格显示(可显示多表内容)

    概述 最近学到EasyUI的Datagrid数据网格,然后就做了一个小例子,中间层利用Struts2来完成,DAO层用的是Hibernate. 数据库 数据库涉及到stuednt(name,noid, ...

  2. flask的查询,一对多,多对多

    模型的关联: 一对多 class Role(db.Model): us = db.relationship('User',backref='role',lazy='dynamic') class Us ...

  3. django的验证码

    pip install Pillow==3.4.1在views.py中创建一个视图函数 from PIL import Image, ImageDraw, ImageFont from django. ...

  4. 『Python基础-14』匿名函数 `lambda`

    匿名函数和关键字lambda 匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数 在Python中,如果要声匿名函数,则需要使用lambda关键字 使用lambda声明的匿名函数能接收任何 ...

  5. HTTP报文中的100状态码

    HTTP状态码(status codes)是HTTP协议中,响应报文的起始行中包含的一种服务器用于向客户端说明操作状态的三位数字.例如在一个正常的GET请求完成后,服务器会向客户端返回 HTTP/ O ...

  6. easyui设置行的背景色

    var arr = new Array(3000082, 3000095); self.itemGrid.datagrid({ rowStyler: function (index, row) { f ...

  7. EEPROM读写学习笔记与I2C总线(二)

    无论任何电子产品都会涉及到数据的产生与数据的保存,这个数据可能并不是用来长久保存,只是在运行程序才会用到,有些数据体量较大对于获取时效性并不太强,各种各样的数据也就有不同的存储载体,这次在EEPROM ...

  8. Java基础之static关键字的用法

    Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.        静态(static)可以是: 变量 ...

  9. P1208 [USACO1.3]混合牛奶 Mixing Milk

    P1208 [USACO1.3]混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业 ...

  10. VINS(八)初始化

    首先通过imu预积分陀螺仪和视觉特征匹配分解Fundamental矩阵获取rotationMatrix之间的约束关系,联立方程组可以求得外参旋转矩阵: 接下来会检测当前frame_count是否达到W ...