VIM进阶学习之几种模式和按键映射
Map是Vim强大的一个重要原因,可以自定义各种快捷键,用起来自然得心应手。
vim里最基本的map用法也就是
:map c a |
这里把c映射成了a,在map生效的情况下,按下c就等同于按下了a
当然,常用的Ctrl,Shift,Alt自然也是支持的。
- 令Ctrl+a对应到a
:map <C-a> a |
- 令Alt+a对应到a
:map <A-a> a |
- 令Ctrl+Alt+a对应到a
:map <C-A-a> a |
到此,我们已经可以做很多事情了。
但是map命令远不只这一种,在不同的模式下,同一组按键可以被映射到不同的组合上。
Vim的模式众多,但是一般被提及的也就是这么几种:
- Normal Mode
也就是最一般的普通模式,默认进入vim之后,处于这种模式。
- Visual Mode
一般译作可视模式,在这种模式下选定一些字符、行、多列。
在普通模式下,可以按v进入。
- Insert Mode
插入模式,其实就是指处在编辑输入的状态。普通模式下,可以按i进入。
- Select Mode
在gvim下常用的模式,可以叫作选择模式吧。用鼠标拖选区域的时候,就进入了选择模式。
和可视模式不同的是,在这个模式下,选择完了高亮区域后,敲任何按键就直接输入并替换选择的文本了。
和windows下的编辑器选定编辑的效果一致。普通模式下,可以按gh进入。
- Command-Line/Ex Mode
就叫命令行模式和Ex模式吧。两者略有不同,普通模式下按冒号(:)进入Command-Line模式,可以输入各种命令,
使用vim的各种强大功能。普通模式下按Q进入Ex模式,其实就是多行的Command-Line模式。
对于Map,有几个基本的概念
- 命令的组合
同Vim下的其他命令一样,命令的名字往往由好几段组成。前缀作为命令本身的修饰符,微调命令的效果。
对于map而言,可能有这么几种前缀
- nore
表示非递归,见下面的介绍
- n
表示在普通模式下生效
- v
表示在可视模式下生效
- i
表示在插入模式下生效
- c
表示在命令行模式下生效
- Recursive Mapping
递归的映射。其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b。
:map a b |
对于c效果等同于
:map c b |
默认的map就是递归的。如果遇到[nore]这种前缀,比如:noremap,就表示这种map是非递归的。
- unmap
unmap后面跟着一个按键组合,表示删除这个映射。
:unmap c |
那么在map生效模式下,c不再被映射到a上。
同样,unmap可以加各种前缀,表示影响到的模式。
- mapclear
mapclear直接清除相关模式下的所有映射。
同样,mapclear可以加各种前缀,表示影响到的模式。
这里列出常用的一些map命令,默认map命令影响到普通模式和可视模式。
:map :noremap :unmap :mapclear
:nmap :nnoremap :nunmap :nmapclear
:vmap :vnoremap :vunmap :vmapclear
:imap :inoremap :iunmap :imapclear
:cmap :cnoremap :cunmap :cmapclear
可以试试这些命令
- 命令行模式下建一个mapping
nmap b a
- 现在普通模式下,按b,可以进入插入模式,随便输入一些字符
- 命令行模式下建一个mapping
vmap b d
- 现在普通模式下,按V,进入了可视模式,并且选定了一整行,按下b,可以删除整行
- 命令行模式下建一个mapping
imap b a
- 现在试着给正在编辑的这个文件输入一个字符”b”吧 :p
- 命令行模式下建一个mapping
cmap b c
- 命令行模式下, 按下b,会出来一个a
好了,到此vim的按键已经被你弄得乱七八糟了,试着用unmap和mapclear清除这些mapping吧。:]
转自:http://haoxiang.org/2011/09/vim-modes-and-mappin/
VIM进阶学习之几种模式和按键映射的更多相关文章
- 辛星跟您玩转vim第一节之vim的下载与三种模式
首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...
- RabbitMQ学习笔记之五种模式及消息确认机制
本文详细介绍简单模式Simple.工作模式Work.发布订阅模式Publish/Subscribe.Topic.Routing. Maven依赖引用 <dependencies> < ...
- 逐步搭建Lamp环境之vim的三种模式以及基本命令
在Linux中vim的三种模式分别为:命令模式.末行模式.编辑模式.以下是三者的关系图: 三种模式的彼此切换: 命令模式是vim中的默认模式. 命令模式切换至末行模式: 使用英文冒号(:). 末行模式 ...
- vi/vim 三种模式的操作
来源:http://www.runoob.com/linux/linux-vim.html ps:刚刚进入vi/vim 是命令模式 一.命令模式 i 切换到输入模式,以输入字符. x 删除当前光标所在 ...
- vim的三种模式
vim的三种模式(最基本的) 命令模式:在该模式下是不能对文件进行编辑的,可以输入快捷键进行一些操作(删除. 复制.移动光标.粘贴)[打开默认 是进入命令模式] 编辑 ...
- Vim操作的四种模式
Vim的四种模式一.启动Vim1.双击桌面的图标,就可以启动Vim(是图形界面的)2.在开始菜单---点--运行 接着输入 vim 或者gvim,就可以启动Vim或Gvim了.二.Vim的模式1.Vi ...
- 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:
小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...
- vim(vi)下的三种模式及其相关命令
vim(vi)下的三种模式1.命令行模式 2.末行模式 3.插入模式 三种模式的联系及其相互转换 在我们输入vi命令进入编写程序的页面后,我们看到的是命令行模式,在我们输入“a”.“i”.“o”.“O ...
- vim的几种模式&快捷键
vim的几种模式&快捷键 2017年01月01日 14:05:24 阅读数:3060 一.vim的模式 基本上vim可以分为三种模式:命令模式,插入模式和底行模式,其实vim有多种模式,我们只 ...
随机推荐
- poj1141 区间dp+路径
//Accepted 176 KB 47 ms //感谢大神们为我们这群渣渣铺平前进的道路!! //用scanf("%s",s)!=EOF WA到死 #include <cs ...
- 学会使用Ogitor
这几天在用Ogre读取Ogitor的场景,遇到了不少问题,在网上也找不到详细的说明,虽然读取Ogitor的场景对很多人来说太简单了,但对一些新手来说就有点难了,我刚开始就觉得是无从下手,因此简单的描述 ...
- 王家卫i
〈旺角卡门〉 因为我很了解我自己,我不能对你承诺什么. 你不要说两次,说两次我就相信了. 我宁愿做一日英雄,都不想成世做条虫! 厨房里有煮好的饭,另外我还买了几个杯子,我知道,用不了多久就都会被打破, ...
- 属性的定义以及@synthesize的使用
1.属性通常是指某些由对象封装或储存的数据.它可以是标志(如名称或颜色),也可以是与一个或多个其他对象的关系. 2.属性的基本声明使用 @property 编译器指令,后面紧跟属性的类型信息和名称.您 ...
- 封装数据库mysql, mysqli
<?php header("content-type:text/html;charset=utf-8"); class db{ //私有的静态属性 private ...
- C++面向对象编程解决三阶矩阵相加减
/*此处用面向对象编程*/ #include<iostream> #include<string.h> using namespace std; class Matrices ...
- HDU5441 Travel 并查集
http://acm.hdu.edu.cn/showproblem.php?pid=5441 无向图,n个点,m条带权边,q次询问,给出数值d,点a可以到点b当且仅当存在一条路线其中最大的权值不超过d ...
- Android重写getResources规避用户调整系统字体大小影响Android屏幕适配
Android屏幕适配一直是一个头疼的问题.除此之外还要考虑APP在实际应用场景中,用户千奇百怪的设置,最常见的用户设置行为就是设置手机的字体大小,比如把字体设置成超大或者超小,这对屏幕适配又带来额外 ...
- Digit (数位DP)
一个正整数的价值就是把这个数的十进制写出来之后,最长的等差子串的长度. 求出在[l,r]范围内的数字的价值总和. (l<=r<=10^12) 记f[now,ml,l,d,pre,st,li ...
- HDU 1848
http://acm.hdu.edu.cn/showproblem.php?pid=1848 利用计算grundy数组,把一类博弈转化为nim博弈,最后x不为0为先手必胜态 #include < ...